fork建立子程序之後,子程序是乙個新的程式,巨集觀上是並行來處理新的任務的
可以直接在子程序的if(pid == 0)裡面幹想讓子程序幹的事情
直接寫到if裡面不夠靈活,因為我們只能把子程序的程式**貼上過來執行,這樣必須知道源**,太長了也不好控制,比如希望子程序執行ls -a,這樣是不行的,因為ls的源**沒有這樣ls放在子程序裡面就實現不了,
此時就是用exec族函式,可以直接把乙個編譯好的可執行程式,直接載入執行,
這樣的話父子程序,子程序需要執行的程式單獨編寫,單獨編譯鏈結,成乙個可執行程式hello,主程式為父程序,fork建立了子程序後,exec乙個hello,很類似乙個呼叫(我自己的理解),
exec族的六個函式
execl l指列出來list和 execv 引數列表不一樣 v 直接給乙個陣列指標,本質上是多個字串
const char *arg[ ],這是乙個字串陣列,也就是常說的 char **理解這個很重要啊,本質上是多個字串
ps 看pid
kill -9 30713可以關掉制定的程序 這裡是訊號部分講解的
變參是以null結尾的,
ececlp execvp 多加了p,起到的作用是,引數列表,file只有檔名沒有路徑,上面的ececl/execv必須要有全路徑名
而加了p的可以是file 也可以是path 只不過相容了file 只有名字,也就是加p的函式,會首先找file這個給定的檔案,如果找到直接執行,如果沒找則回去環境變數指定的目錄去找,如果找到則去執行,多幫著找了乙個位置
execle execve多加了e 引數列表中,多加了envp形參,這個就是environment環境變數的意思,我們在執行這個path的時候
char *const envp[ ],呼叫這個程式的時候,區別,執行可執行程式時,會多傳遞乙個環境變數陣列進去,這個不一定是系統預設的環境變數,多的這個可以在程式中使用,這個並不是很常用,朱老師也沒用過
else if(pid == 0)//子程序
;//注意定義方法
execv("/bin/ls", argv);
} else
#if 0
pid = fork();
if(pid > 0)//父程序
else if(pid == 0)//子程序
else
#endif
exit(0);
}自己的可執行函式
#include int main(int argc, char *argv)//注意規範寫法
return 0;
}
#include#include #include #include #include #include #include int main(void)
else if(pid == 0)//子程序
Linux程序之exec族函式
fork函式建立新程序後,經常會在新程序中呼叫exec函式去執行另外乙個程式。當程序呼叫exec函式時,該程序被完全替換為新程式。因為呼叫exec函式並不建立新程序,所以前後程序的id並沒有改變。原創鏈結 include include include 函式原型 int execl const ch...
程序 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函式時,該程序的使用者空間 和資料完全被新程式替換,從新程式的啟動例程開始執...