在程序間的程式替換
用fork建立子程序後執行的是和父程序相同的程式(但有可能執⾏行不同的**分⽀支),
子程序往往要呼叫一種exec函式以執⾏行另⼀乙個程式。
當程序呼叫一種exec函式時,該程序的使用者空間**和資料完全被新程式替換,從新程式的啟動例程開始執行。
呼叫exec並後該程序的id並未改變。不建立新程序,所以呼叫exec前後該程序的id並未改變。因此在task_struct中的其他資訊並沒有發生改變
其實有六種以exec開頭的函式,統稱exec函式:
#include
int execl(const
char *path, const
char *arg, ...);
int execlp(const
char *file, const
char *arg, ...);
int execle(const
char *path, const
char *arg, ..., char *const envp);
int execv(const
char *path, char *const argv);
int execvp(const
char *file, char *const argv);
int execve(const
char *path, char *const argv, char *const envp);
1、使用execl:
帶有字母l(表⽰示list)的exec函式要求將新程式的每個命令列引數都當作乙個引數傳給 它,命令列 引數的個數是可變的,因此函式原型中有…,…中的最後⼀乙個可變引數應該是 null, 起sentinel的作用
#include
#include
#include
int main()
else
}return
0;}
執行結果:
[admin@localhost linux8]$ ./wait
child start!
total 24
1054015 drwxrwxr-x. 2 500 500 4096 may 10 01:18 .
1053939 drwxrwxr-x. 7 500 500 4096 may 9 20:39 ..
1054019 -rw-rw-r–. 1 500 500 65 may 9 20:41 makefile
1054018 -rwxrwxr-x. 1 500 500 5224 may 10 01:18 wait
1054021 -rw-rw-r–. 1 500 500 2099 may 10 01:18 wait.c
wait child success!
在子程序中進行了程式的替換也就是ls程式的**和資料替換了子程序的**和資料
2、使用int execlp(const char *file, const char *arg, …);
不用加具體路徑
不帶字母p(表⽰示path)的exec函式 第⼀乙個引數必須是程式的相對路徑或絕對路徑,例如 「/bin/ls」或」./a.out」,⽽而不能 是」ls」或」a.out」。對於帶字母p的函式: 如果引數中包含/,則 將其視為路徑名。 否則視為不帶路徑的程式名,在path環境變數的⽬目錄列表中搜尋這 個程式
帶有字母v(表⽰示vector)的函式,則應該先構造⼀乙個指向各引數的指標數 組,然後將該數 組的⾸首位址當作引數傳給它,陣列中的最後⼀乙個指標也應該是null,就像main函式 的 argv引數或者環境變數表⼀樣。
帶有字母v(表⽰示vector)的函式,則應該先構造⼀乙個指向各引數的指標數 組,然後將該數 組的⾸首位址當作引數傳給它,陣列中的最後⼀乙個指標也應該是null,就像main函式 的 argv引數或者環境變數表⼀一樣。
不帶字母p(表⽰示path)的exec函式 第⼀乙個引數必須是程式的相對路徑或絕對路徑,例如 「/bin/ls」或」./a.out」,⽽而不能 是」ls」或」a.out」。對於帶字母p的函式: 如果引數中包含/,則 將其視為路徑名。 否則視為不帶路徑的程式名,在path環境變數的⽬目錄列表中搜尋這 個程式。
對於以e(表⽰示environment)結尾的exec函式,可以把乙份新的環境變數表傳給它,其他 exec函式 仍使⽤用當前的環境變數表執行新程式
linux下exec函式族
1.1 exec函式族相關函式 include extern char environ int execl const char path,const char arg,char null int execlp const char file,const char arg,char null int...
Linux系統下的 exec系列函式
1 exec函式說明 fork函式是用於建立乙個子程序,該子程序幾乎是父程序的副本,而有時我們希望子程序去執行另外的程式,exec函式族就提供了乙個在程序中啟動另乙個程式執行的方法。它可以根據指定的檔名或目錄名找到可執行檔案,並用它來取代原呼叫程序的資料段 段和堆疊段,在執行完之後,原呼叫程序的內容...
linux下的exec命令
shell 中的 exec 兩種用法 1.exec 命令 命令代替shell程式,命令退出,shell 退出 比如 exec ls 2.exec 檔案重定向,可以將檔案的重定向就看為是shell程式的檔案重定向 比如 exec 5shell的內建命令exec將並不啟動新的shell,而是用要被執行命...