新聞中心

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

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

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

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

        此程序的運行結果與在shell中直接鍵入命令“ps-ef”是一樣的,當然,在不同系統的不同時刻都可能會有不同的結果。

        接下來的示例使用完整的文件目錄來查找對應的可執行文件。注意目錄必須以“/”開頭,否則將其視為文件名。

        /*execl.c*/

        #includeunistd.h>

        #includestdio.h>

        #includestdlib.h>

        intmain()

        {

        if(()==0)

        {

        /*調用execl(),注意這里要給出ps程序所在的完整路徑*/

        if(execl(/bin/ps,ps,-ef,NULL)0)

        {

        printf(Execlerrorn);

        }

        }

        }

        同樣下載到目標板上運行,運行結果同上例。

        下面的示例利用execle(),將環境變量添加到新建的子進程中,這里的“env”是查看當前進程環境變量的命令,如下所示:

        /*execle.c*/

        #includeunistd.h>

        #includestdio.h>

        #includestdlib.h>

        intmain()

        {

        /*命令參數列表,必須以NULL結尾*/

        char*envp[]={PATH=/tmp,USER=david,NULL};

        if(()==0)

        {

        /*調用execle(),注意這里也要指出env的完整路徑*/

        if(execle(/usr/bin/env,env,NULL,envp)0)

        {

        printf(Execleerrorn);

        }

        }

        }

        下載到目標板后的運行結果如下所示:

        $./execle

        PATH=/tmp

        USER=sunq

        最后一個示例使用execve()函數,通過構造指針數組的方式來傳遞參數,注意參數列表一定要以NULL作為結尾標識符。其代碼和運行結果如下所示:

        #includeunistd.h>

        #includestdio.h>

        #includestdlib.h>

        intmain()

        {

        /*命令參數列表,必須以NULL結尾*/

        char*arg[]={env,NULL};

        char*envp[]={PATH=/tmp,USER=david,NULL};

        if(()==0)

        {

        if(execve(/usr/bin/env,arg,envp)0)

        {

        printf(Execveerrorn);

        }

        }

        }

        下載到目標板后的運行結果如下所示:

        $./execve

        PATH=/tmp

        USER=david

        (4)exec函數族使用注意點。

        在使用exec函數族時,一定要加上錯誤判斷語句。exec很容易執行失敗,其中最常見的原因有:

        n 找不到文件或路徑,此時errno被設置為ENOENT;

        n 數組argv和envp忘記用NULL結束,此時errno被設置為EFAULT;

        n 沒有對應可執行文件的運行權限,此時errno被設置為EACCES。

        小知識

        事實上,這6個函數中真正的系統調用只有execve(),其他5個都是庫函數,它們最終都會調用execve()這個系統調用。

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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 恩施市| 青海省| 左权县| 麻城市| 靖江市| 荣成市| 绥阳县| 凉山| 遂川县| 遂溪县| 巫溪县| 山西省| 交口县| 阿克陶县| 宁武县| 昔阳县| 水富县| 济南市| 嘉祥县| 方山县| 酒泉市| 洪雅县| 高邮市| 岫岩| 灌阳县| 连云港市| 镇雄县| 洞头县| 康定县| 滨海县| 双流县| 库尔勒市| 浮梁县| 九龙县| 无极县| 阳泉市| 铁力市| 张家港市| 襄樊市| 宁阳县| 洪江市|