新聞中心

        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不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 秦安县| 东兴市| 渭源县| 星子县| 大埔县| 冷水江市| 福贡县| 陇川县| 怀集县| 海林市| 乌审旗| 奉节县| 南澳县| 阿尔山市| 刚察县| 福鼎市| 贵南县| 临邑县| 万山特区| 饶平县| 绵阳市| 无极县| 宁德市| 舞阳县| 古蔺县| 稷山县| 陈巴尔虎旗| 德庆县| 安宁市| 红河县| 蓬安县| 城口县| 开封县| 吴川市| 肥东县| 伊宁市| 古蔺县| 同江市| 峨边| 宜阳县| 深泽县|