在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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

            (4)使用注意點(diǎn)。

            ()使用一次就創(chuàng)建一個(gè)進(jìn)程,所以若把()放在了ifelse判斷語(yǔ)句中則要小心,不能多次使用()函數(shù)。

            小知識(shí)

            由于fork()完整地復(fù)制了父進(jìn)程的整個(gè)地址空間,因此執(zhí)行速度是比較慢的。為了加快fork()的執(zhí)行速度,有些UNIX系統(tǒng)設(shè)計(jì)者創(chuàng)建了vfork()。vfork()也能創(chuàng)建新進(jìn)程,但它不產(chǎn)生父進(jìn)程的副本。它是通過(guò)允許父子進(jìn)程可訪問(wèn)相同物理內(nèi)存從而偽裝了對(duì)進(jìn)程地址空間的真實(shí)拷貝,當(dāng)子進(jìn)程需要改變內(nèi)存中數(shù)據(jù)時(shí)才復(fù)制父進(jìn)程。這就是著名的“寫(xiě)操作時(shí)復(fù)制”(copy-on-write)技術(shù)。

            現(xiàn)在很多嵌入式系統(tǒng)的fork()函數(shù)調(diào)用都采用vfork()函數(shù)的實(shí)現(xiàn)方式,實(shí)際上uClinux所有的多進(jìn)程管理都通過(guò)vfork()來(lái)實(shí)現(xiàn)。

            2.exec函數(shù)族

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

            fork()函數(shù)是用于創(chuàng)建一個(gè)子進(jìn)程,該子進(jìn)程幾乎復(fù)制了父進(jìn)程的全部?jī)?nèi)容,但是,這個(gè)新創(chuàng)建的進(jìn)程如何執(zhí)行呢?這個(gè)exec函數(shù)族就提供了一個(gè)在進(jìn)程中啟動(dòng)另一個(gè)程序執(zhí)行的方法。它可以根據(jù)指定的文件名或目錄名找到可執(zhí)行文件,并用它來(lái)取代原調(diào)用進(jìn)程的數(shù)據(jù)段、代碼段和堆棧段,在執(zhí)行完之后,原調(diào)用進(jìn)程的內(nèi)容除了進(jìn)程號(hào)外,其他全部被新的進(jìn)程替換了。另外,這里的可執(zhí)行文件既可以是二進(jìn)制文件,也可以是下任何可執(zhí)行的腳本文件。

            中使用exec函數(shù)族主要有兩種情況。

            n 當(dāng)進(jìn)程認(rèn)為自己不能再為系統(tǒng)和用戶做出任何貢獻(xiàn)時(shí),就可以調(diào)用exec函數(shù)族中的任意一個(gè)函數(shù)讓自己重生。

            n 如果一個(gè)進(jìn)程想執(zhí)行另一個(gè)程序,那么它就可以調(diào)用fork()函數(shù)新建一個(gè)進(jìn)程,然后調(diào)用exec函數(shù)族中的任意一個(gè)函數(shù),這樣看起來(lái)就像通過(guò)執(zhí)行應(yīng)用程序而產(chǎn)生了一個(gè)新進(jìn)程(這種情況非常普遍)。

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

            實(shí)際上,在Linux中并沒(méi)有exec()函數(shù),而是有6個(gè)以exec開(kāi)頭的函數(shù),它們之間語(yǔ)法有細(xì)微差別,本書(shū)在下面會(huì)詳細(xì)講解。

            下表7.3列舉了exec函數(shù)族的6個(gè)成員函數(shù)的語(yǔ)法。

            表7.3 exec函數(shù)族成員函數(shù)語(yǔ)法

            所需頭文件

            #includeunistd.h>

            函數(shù)原型

            intexecl(constchar*path,constchar*arg,...)

            intexecv(constchar*path,char*constargv[])

            intexecle(constchar*path,constchar*arg,...,char*constenvp[])

            intexecve(constchar*path,char*constargv[],char*constenvp[])

            intexeclp(constchar*file,constchar*arg,...)

            intexecvp(constchar*file,char*constargv[])

            函數(shù)返回值

            -1:出錯(cuò)

            這6個(gè)函數(shù)在函數(shù)名和使用語(yǔ)法的規(guī)則上都有細(xì)微的區(qū)別,下面就可執(zhí)行文件查找方式、參數(shù)表傳遞方式及環(huán)境變量這幾個(gè)方面進(jìn)行比較。

            n 查找方式。

            讀者可以注意到,表7.3中的前4個(gè)函數(shù)的查找方式都是完整的文件目錄路徑,而最后2個(gè)函數(shù)(也就是以p結(jié)尾的兩個(gè)函數(shù))可以只給出文件名,系統(tǒng)就會(huì)自動(dòng)按照環(huán)境變量“$PATH”所指定的路徑進(jìn)行查找。

            n 參數(shù)傳遞方式。

            exec函數(shù)族的參數(shù)傳遞有兩種方式:一種是逐個(gè)列舉的方式,而另一種則是將所有參數(shù)整體構(gòu)造指針數(shù)組傳遞。

            在這里是以函數(shù)名的第5位字母來(lái)區(qū)分的,字母為“l”(list)的表示逐個(gè)列舉參數(shù)的方式,其語(yǔ)法為char*arg;字母為“v”(vertor)的表示將所有參數(shù)整體構(gòu)造指針數(shù)組傳遞,其語(yǔ)法為*constargv[]。讀者可以觀察execl()、execle()、execlp()的語(yǔ)法與execv()、execve()、execvp()的區(qū)別。它們具體的用法在后面的實(shí)例講解中會(huì)具體說(shuō)明。

            這里的參數(shù)實(shí)際上就是用戶在使用這個(gè)可執(zhí)行文件時(shí)所需的全部命令選項(xiàng)字符串(包括該可執(zhí)行程序命令本身)。要注意的是,這些參數(shù)必須以NULL表示結(jié)束,如果使用逐個(gè)列舉方式,那么要把它強(qiáng)制轉(zhuǎn)化成一個(gè)字符指針,否則exec將會(huì)把它解釋為一個(gè)整型參數(shù),如果一個(gè)整型數(shù)的長(zhǎng)度char*的長(zhǎng)度不同,那么exec函數(shù)就會(huì)報(bào)錯(cuò)。

            n 環(huán)境變量。

            exec函數(shù)族可以默認(rèn)系統(tǒng)的環(huán)境變量,也可以傳入指定的環(huán)境變量。這里以“e”(environment)結(jié)尾的兩個(gè)函數(shù)execle()和execve()就可以在envp[]中指定當(dāng)前進(jìn)程所使用的環(huán)境變量。

            表7.4是對(duì)這4個(gè)函數(shù)中函數(shù)名和對(duì)應(yīng)語(yǔ)法的小結(jié),主要指出了函數(shù)名中每一位所表明的含義,希望讀者結(jié)合此表加以記憶。

            表7.4 exec函數(shù)名對(duì)應(yīng)含義

            前4位

            統(tǒng)一為:exec

            第5位

            l:參數(shù)傳遞為逐個(gè)列舉方式

            execl、execle、execlp

            v:參數(shù)傳遞為構(gòu)造指針數(shù)組方式

            execv、execve、execvp

            第6位

            e:可傳遞新進(jìn)程環(huán)境變量

            execle、execve

            p:可執(zhí)行文件查找方式為文件名

            execlp、execvp

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

            下面的第一個(gè)示例說(shuō)明了如何使用文件名的方式來(lái)查找可執(zhí)行文件,同時(shí)使用參數(shù)列表的方式。這里用的函數(shù)是execlp()。

            /*execlp.c*/

            #includeunistd.h>

            #includestdio.h>

            #includestdlib.h>

            intmain()

            {

            if(fork()==0)

            {

            /*調(diào)用execlp()函數(shù),這里相當(dāng)于調(diào)用了ps-ef命令*/

            if((ret=execlp(ps,ps,-ef,NULL))0)

            {

            printf(Execlperrorn);

            }

            }

            }

            在該程序中,首先使用fork()函數(shù)創(chuàng)建一個(gè)子進(jìn)程,然后在子進(jìn)程里使用execlp()函數(shù)。讀者可以看到,這里的參數(shù)列表列出了在shell中使用的命令名和選項(xiàng)。并且當(dāng)使用文件名進(jìn)行查找時(shí),系統(tǒng)會(huì)在默認(rèn)的環(huán)境變量PATH中尋找該可執(zhí)行文件。讀者可將編譯后的結(jié)果下載到目標(biāo)板上,運(yùn)行結(jié)果如下所示:

            $./execlp

            PIDTTYUidSizeStateCommand

            1root1832Sinit

            2root0S[keventd]

            3root0S[ksoftirqd_CPU0]

            4root0S[kswapd]

            5root0S[bdflush]

            6root0S[kupdated]

            7root0S[mtdblockd]

            8root0S[khubd]

            35root2104S/bin/bash/usr/etc/rc.local

            36root2324S/bin/bash

            41root1364S/sbin/inetd

            53root14260S/Qtopia/qtopia-free-1.7.0/bin/qpe-qws

            54root11672Squicklauncher

            65root0S[usb-storage-0]

            66root0S[scsi_eh_0]

            83root2020Rps-ef

            $env

            ……

            PATH=/Qtopia/qtopia-free-1.7.0/bin:/usr/bin:/bin:/usr/sbin:/sbin

            ……

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


            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉