fork 建立的子程序一般不會執行和父程序相同的**段,而是呼叫exec
相關函式,將該程序的使用者空間**和資料完全替換,子程序從替換的新程式啟動執行。exec僅僅是替換**和資料,並不會建立新程序,所以被替換的程序 id 和子程序 id 相等。
如下圖:
新程序從呼叫程序繼承了下列屬性:
exec函式族 函式
引數格式
是否帶路徑
是否使用當前環境變數
int execl(const char * path,const char * arg, …);
list不帶是
int execlp(const char * file,const char * arg, …);
list帶是
int execle(const char * path,const char * arg, … char const *envp);
list
不帶需自己組裝環境變數
int execv(const char * path,char* const argv);
array不帶是
int execvp(const char * file,char* const argv);
array帶是
int execve(const char * path,char* const argv, char const *envp);
array
不帶需自己組裝環境變數
引數:
返回值:替換成功,則從新程序開始執行,不會返回,失敗返回-1,;所以該函式只要返回,就說明程序替換失敗。事實上這些函式最終都調了系統呼叫
execve
, 如下圖:
看下面這個例子:
hello.c
#include
int main(int argc, char *argv, char *env)
int j = 0;
while(env[j])
return
0;}
exec.c
#include
#include
#include
extern
char **environ;
int main()
; char* const env = ;
execve(path, arg, env);
return
0;}
執行結果:
可以看到,列印出的引數正是我們傳過去的引數,而環境變數也是如此。
——完!
程序 exec函式族
一 exec函式族 通過呼叫exec函式族實現讓父子程序執行不同的程式,父程序不會受影響。exec函式族,就是以exec為開頭的函式,比如execl函式 execlp函式等,所以稱它為exec函式族。l list 命令列引數列表 p path 搜尋file時的使用的path變數 v vector向量...
Linux 程序 exec函式族
其他exec 函式 練習拓展dup2 dup to 函式 一 exec的簡介 1.fork建立程序後執行的是和父程序相同的程式 但有可能執行不同的 分支 子程序往往要呼叫一種exec函式執行另一種程式。當程序呼叫一種exec函式時,該程序的使用者空間 和資料完全被新程式替換,從新程式的啟動例程開始執...
Linux程序 exec族函式
1 為什麼要使用exec族函式 當我們fork乙個子程序就是為了執行乙個新的程式,此時可以呼叫exec族函式,執行已經編譯好的可執行程式或者linux自帶的ls cd等命令。2 exec族函式如何使用 函式原型 include extern char environ intexecl const c...