新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 進程控制開發之:Linux進程控制編程

        進程控制開發之:Linux進程控制編程

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257131.htm

        3)waitpid()使用實例。

        由于wait()的使用較為簡單,在此僅以waitpid()為例進行講解。本例中首先使用()創建一個子進程,然后讓其子進程暫停5s(使用了sleep())。接下來對原有的父進程使用waitpid(),并使用參數WNOHANG使該父進程不會阻塞。若有子進程退出,則waitpid()返回子進程號;若沒有子進程退出,則waitpid()返回0,并且父進程每隔一秒循環判斷一次。該程序的流程圖如圖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)/*子進程*/

        {

        /*子進程暫停5s*/

        sleep(5);

        /*子進程正常退出*/

        exit(0);

        }

        else/*父進程*/

        {

        /*循環測試子進程是否退出*/

        do

        {

        /*調用waitpid,且父進程不阻塞*/

        pr=waitpid(pc,NULL,WNOHANG);

        /*若子進程還未退出,則父進程暫停1s*/

        if(pr==0)

        {

        printf(Thechildprocesshasnotexitedn);

        sleep(1);

        }

        }while(pr==0);

        /*若發現子進程退出,打印出相應情況*/

        if(pr==pc)

        {

        printf(Getchildexitcode:%dn,pr);

        }

        else

        {

        printf(Someerroroccured.n);

        }

        }

        }

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

        $./waitpid

        Thechildprocesshasnotexited

        Thechildprocesshasnotexited

        Thechildprocesshasnotexited

        Thechildprocesshasnotexited

        Thechildprocesshasnotexited

        Getchildexitcode:75

        可見,該程序在經過5次循環之后,捕獲到了子進程的退出信號,具體的子進程號在不同的系統上會有所區別。

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

        $./waitpid

        Getchildexitcode:76

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

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

        上一頁 1 2 3 4 5 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新蔡县| 天峻县| 屯门区| 福贡县| 得荣县| 凌源市| 林周县| 五寨县| 济南市| 老河口市| 敦煌市| 大安市| 兰溪市| 井研县| 花莲市| 裕民县| 阿克陶县| 文安县| 师宗县| 时尚| 南溪县| 金堂县| 华容县| 洪雅县| 许昌市| 鄱阳县| 长海县| 清水河县| 泽库县| 通化县| 海晏县| 铜山县| 惠水县| 仙桃市| 惠安县| 衡东县| 芮城县| 东兰县| 高平市| 乡城县| 宁晋县|