在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 進(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://www.biyoush.com/article/257131.htm

            7.2編程

            1.()

            中創(chuàng)建一個(gè)新進(jìn)程的惟一方法是使用()()中一個(gè)非常重要的,和讀者以往遇到的函數(shù)有一些區(qū)別,因?yàn)樗雌饋?lái)執(zhí)行一次卻返回兩個(gè)值。難道一個(gè)函數(shù)真的能返回兩個(gè)值嗎?希望讀者能認(rèn)真地學(xué)習(xí)這一部分的內(nèi)容。

            (1)fork()函數(shù)說(shuō)明。

            fork()函數(shù)用于從已存在的進(jìn)程中創(chuàng)建一個(gè)新進(jìn)程。新進(jìn)程稱(chēng)為子進(jìn)程,而原進(jìn)程稱(chēng)為父進(jìn)程。使用fork()函數(shù)得到的子進(jìn)程是父進(jìn)程的一個(gè)復(fù)制品,它從父進(jìn)程處繼承了整個(gè)進(jìn)程的地址空間,包括進(jìn)程上下文、代碼段、進(jìn)程堆棧、內(nèi)存信息、打開(kāi)的文件描述符、信號(hào)控制設(shè)定、進(jìn)程優(yōu)先級(jí)、進(jìn)程組號(hào)、當(dāng)前工作目錄、根目錄、資源限制和控制終端等,而子進(jìn)程所獨(dú)有的只有它的進(jìn)程號(hào)、資源使用和計(jì)時(shí)器等。

            因?yàn)樽舆M(jìn)程幾乎是父進(jìn)程的完全復(fù)制,所以父子兩個(gè)進(jìn)程會(huì)運(yùn)行同一個(gè)程序。因此需要用一種方式來(lái)區(qū)分它們,并使它們照此運(yùn)行,否則,這兩個(gè)進(jìn)程不可能做不同的事。

            實(shí)際上是在父進(jìn)程中執(zhí)行fork()函數(shù)時(shí),父進(jìn)程會(huì)復(fù)制出一個(gè)子進(jìn)程,而且父子進(jìn)程的代碼從fork()函數(shù)的返回開(kāi)始分別在兩個(gè)地址空間中同時(shí)運(yùn)行。從而兩個(gè)進(jìn)程分別獲得其所屬fork()的返回值,其中在父進(jìn)程中的返回值是子進(jìn)程的進(jìn)程號(hào),而在子進(jìn)程中返回0。因此,可以通過(guò)返回值來(lái)判定該進(jìn)程是父進(jìn)程還是子進(jìn)程。

            同時(shí)可以看出,使用fork()函數(shù)的代價(jià)是很大的,它復(fù)制了父進(jìn)程中的代碼段、數(shù)據(jù)段和堆棧段里的大部分內(nèi)容,使得fork()函數(shù)的系統(tǒng)開(kāi)銷(xiāo)比較大,而且執(zhí)行速度也不是很快。

            (2)fork()函數(shù)語(yǔ)法。

            表7.2列出了fork()函數(shù)的語(yǔ)法要點(diǎn)。

            表7.2 fork()函數(shù)語(yǔ)法要點(diǎn)

            所需頭文件

            #includesys/types.h>//提供類(lèi)型pid_t的定義
            #includeunistd.h>

            函數(shù)原型

            pid_tfork(void)

            函數(shù)返回值

            0:子進(jìn)程

            子進(jìn)程ID(大于0的整數(shù)):父進(jìn)程

            -1:出錯(cuò)

            (3)fork()函數(shù)使用實(shí)例。

            /*fork.c*/

            #includesys/types.h>

            #includeunistd.h>

            #includestdio.h>

            #includestdlib.h>

            intmain(void)

            {

            pid_tresult;

            /*調(diào)用fork()函數(shù)*/

            result=fork();

            /*通過(guò)result的值來(lái)判斷fork()函數(shù)的返回情況,首先進(jìn)行出錯(cuò)處理*/

            if(result==-1)

            {

            printf(Forkerrorn);

            }

            elseif(result==0)/*返回值為0代表子進(jìn)程*/

            {

            printf(Thereturnedvalueis%dn

            Inchildprocess!!nMyPIDis%dn,result,getpid());

            }

            else/*返回值大于0代表父進(jìn)程*/

            {

            printf(Thereturnedvalueis%dn

            Infatherprocess!!nMyPIDis%dn,result,getpid());

            }

            returnresult;

            }

            將可執(zhí)行程序下載到目標(biāo)板上,運(yùn)行結(jié)果如下所示:

            $arm-linux-gccfork.c–ofork(或者修改Makefile)

            $./fork

            Thereturnedvalueis76/*在父進(jìn)程中打印的信息*/

            Infatherprocess!!

            MyPIDis75

            Thereturnedvalueis:0/*在子進(jìn)程中打印的信息*/

            Inchildprocess!!

            MyPIDis76

            從該實(shí)例中可以看出,使用fork()函數(shù)新建了一個(gè)子進(jìn)程,其中的父進(jìn)程返回子進(jìn)程的PID,而子進(jìn)程的返回值為0。

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

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

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉