国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux啟動新進程的幾種方法及比較

2019-10-26 18:52:03
字體:
來源:轉載
供稿:網友

有時候,我們需要在自己的程序(進程)中啟動另一個程序(進程)來幫助我們完成一些工作,那么我們需要怎么才能在自己的進程中啟動其他的進程呢?在Linux中提供了不少的方法來實現這一點,下面就來介紹一個這些方法及它們之間的區別。

一、system函數調用

system函數的原型為:

#include <stdlib.h> int system (const char *string); 

它的作用是,運行以字符串參數的形式傳遞給它的命令并等待該命令的完成。命令的執行情況就如同在shell中執行命令:sh -c string。如果無法啟動shell來運行這個命令,system函數返回錯誤代碼127;如果是其他錯誤,則返回-1。否則,system函數將返回該命令的退出碼。

注意:system函數調用用一個shell來啟動想要執行的程序,所以可以把這個程序放到后臺中執行,這里system函數調用會立即返回。

可以先先下面的例子,源文件為new_ps_system.c,代碼如下:

#include <stdlib.h> #include <stdio.h> int main() {   printf("Running ps with system/n");   //ps進程結束后才返回,才能繼續執行下面的代碼   system("ps au");// 1   printf("ps Done/n");   exit(0); } 

該程序調用ps程序打印所有與本用戶有關的進程,最后才打印ps Done。運行結果如下:

如果把注釋1的語句改為:system("ps au &");則system函數立即返回,不用等待ps進程結束即可執行下面的代碼。所以你看到的輸出,ps Done可能并不是出現在最后一行,而是在中間。

一般來說,使用system函數不是啟動其他進程的理想手段,因為它必須用一個shell來啟動需要的程序,即在啟動程序之前需要先啟動一個shell,而且對shell的環境的依賴也很大,因此使用system函數的效率不高。

二、替換進程映像——使用exec系列函數

exec系列函數由一組相關的函數組成,它們在進程的啟動方式和程序參數的表達方式上各有不同。但是exec系列函數都有一個共同的工作方式,就是把當前進程替換為一個新進程,也就是說你可以使用exec函數將程序的執行從一個程序切換到另一個程序,在新的程序啟動后,原來的程序就不再執行了,新進程由path或file參數指定。exec函數比system函數更有效。

exec系列函數的類型為:

#include <unistd.h> char **environ; int execl (const char *path, const char *arg0, ..., (char*)0); int execlp(const char *file, const char *arg0, ..., (char*)0); int execle(const char *path, const char *arg0, ..., (char*)0, char *const envp[]); int execv (const char *path, char *const argv[]); int execvp(cosnt char *file, char *const argv[]); int execve(const char *path, char *const argv[], char *const envp[]);             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仪陇县| 易门县| 屏山县| 德化县| 上虞市| 沁阳市| 前郭尔| 蕲春县| 枣强县| 黄大仙区| 南平市| 揭东县| 绵阳市| 三河市| 樟树市| 德令哈市| 郯城县| 荥阳市| 邢台市| 五河县| 瑞丽市| 长武县| 陆丰市| 寿光市| 岳西县| 西昌市| 罗源县| 白河县| 宜兴市| 独山县| 土默特左旗| 即墨市| 东乌| 昌黎县| 萍乡市| 乌鲁木齐县| 梅河口市| 汽车| 钦州市| 三门县| 遂宁市|