<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 進(jìn)程控制開(kāi)發(fā)之:Linux進(jìn)程控制編程

進(jìn)程控制開(kāi)發(fā)之:Linux進(jìn)程控制編程

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257131.htm

3)waitpid()使用實(shí)例。

由于wait()的使用較為簡(jiǎn)單,在此僅以waitpid()為例進(jìn)行講解。本例中首先使用()創(chuàng )建一個(gè)子進(jìn)程,然后讓其子進(jìn)程暫停5s(使用了sleep())。接下來(lái)對原有的父進(jìn)程使用waitpid(),并使用參數WNOHANG使該父進(jìn)程不會(huì )阻塞。若有子進(jìn)程退出,則waitpid()返回子進(jìn)程號;若沒(méi)有子進(jìn)程退出,則waitpid()返回0,并且父進(jìn)程每隔一秒循環(huán)判斷一次。該程序的流程圖如圖7.5所示。

圖7.5waitpid示例程序流

該程序源代碼如下所示:

/*waitpid.c*/

#includesys/types.h>

#includesys/wait.h>

#includeunistd.h>

#includestdio.h>

#includestdlib.h>

intmain()

{

pid_tpc,pr;

pc=();

if(pc0)

{

printf(Errorn);

}

elseif(pc==0)/*子進(jìn)程*/

{

/*子進(jìn)程暫停5s*/

sleep(5);

/*子進(jìn)程正常退出*/

exit(0);

}

else/*父進(jìn)程*/

{

/*循環(huán)測試子進(jìn)程是否退出*/

do

{

/*調用waitpid,且父進(jìn)程不阻塞*/

pr=waitpid(pc,NULL,WNOHANG);

/*若子進(jìn)程還未退出,則父進(jìn)程暫停1s*/

if(pr==0)

{

printf(Thechildprocesshasnotexitedn);

sleep(1);

}

}while(pr==0);

/*若發(fā)現子進(jìn)程退出,打印出相應情況*/

if(pr==pc)

{

printf(Getchildexitcode:%dn,pr);

}

else

{

printf(Someerroroccured.n);

}

}

}

將該程序交叉編譯,下載到目標板后的運行結果如下所示:

$./waitpid

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Getchildexitcode:75

可見(jiàn),該程序在經(jīng)過(guò)5次循環(huán)之后,捕獲到了子進(jìn)程的退出信號,具體的子進(jìn)程號在不同的系統上會(huì )有所區別。

讀者還可以嘗試把“pr=waitpid(pc,NULL,WNOHANG);”這句改為“pr=waitpid(pc,NULL,0);”或者“pr=wait(NULL);”,運行的結果為:

$./waitpid

Getchildexitcode:76

可見(jiàn),在上述兩種情況下,父進(jìn)程在調用waitpid()或wait()之后就將自己阻塞,直到有子進(jìn)程退出為止。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 3 4 5 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>