替換原理
用fork建立子程序後執行的是和父程序相同的程式,但有可能在執行不同的**分支,(但是在實際情況中,我們通常希望子程序和父程序執行不同的程式,來提高效率,所以才有程式替換),子程序往往要呼叫一種exec函式用來執行另乙個程式,將**和資料替換為可執行檔案的**和資料,環境變數並不改變。當程序的使用者空間**和資料完全被新程式替換,從新程式開始執行。呼叫exec並不建立新程序,所以呼叫exec前後的程序id並不改變。
特別的:程序程式並沒有返回值,因為替換成功以後就不再換回來了,就執行新的程式,除非程式替換失敗就返回-1。所以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 ar**);
int execvp(const char *file, char *const ar**);
int execve(const char *path, char *const ar**, char *const envp);
函式第一列引數都表示將要呼叫誰,而第二列及以後的引數表示怎樣執行,函式傳參以null結尾。
命名理解
事實上,只有execve是真正的系統呼叫函式,其他的五個函式底層都呼叫execve。
程序程式替換
程序程式替換並沒有建立新的程序 怎麼樣才算是新建了乙個程序?建立好task struct,再把task struct插到雙向鍊錶裡面,這才是建立好了乙個程序。所謂的程序程式替換就是把物理記憶體上的資料和 替換成了另外乙個磁碟上的可執行檔案的資料和 說白了,我們前面寫的一些程式都是把它編譯成乙個可執行...
程序程式替換
因為父程序通過fork 建立的子程序,與父程序執行相同程式,當我們想讓子程序執行不同的程式時,就需要使用exec函式將子程序與新程式替換 程序程式替換需要注意幾點 exec 函式族 其中引數有差異,底層原理差不多相同 exrcl 中的l意為 list,這個exec函式是乙個可變引數列表的函式 函式功...
Linux程序的程式替換
程式替換 假如作業系統正在執行某乙個程式,我們可以利用程式替換函式指定乙個新的程式,讓作業系統去執行我們新指定的程式。也就是這樣一種情形下,我們fork乙個程序,如果fork成功,子程序會和父程序執行相同的 而我們建立子程序是希望子程序執行指定的操作,所以需要執行exec族函式。程式替換函式 程式替...