fork/exec/system 用法簡介

pid_t fork(void);

1、從父進程複製出子進程,進程控制塊內容相同,用戶態代碼和數據也相同;

2、父進程返回子進程ID(父進程唯一能得到子進程ID的時刻),子進程返回0;

3、返回後父進程與子進程的運行順序不確定,由調度程序確定;

4、父進程打開的描述符都被複制到子進程中,子進程不集成父進程的鎖。


pid_t vfork(void);

與fork基本相同,有兩處顯著差異:

1、子進程沒有複製出一套自己的數據空間與堆棧信息,子進程中的改變也會影響父進程;

2、vfork後先運行子進程,父進程此時阻塞;當子進程執行exit或exec函數後父進程才能繼續執行;


exec

exec是一系列函數,分爲execl/execlp/execle/execv/execvp/execve六種

1、實質上前五種都是對execve的某種形式的封裝,只有execve是系統調用

2、exec並不創建新的進程,只是用另一個程序替換了當前進程的正文、數據、堆棧段;因此進程ID不會改變。

3、調用exec成功則加載新的程序從起始代碼開始執行,不會返回到原程序中;當調用出錯時纔有返回值,爲-1;


system

集成了fork、exec、wait的功能並添加了響應的錯誤處理,缺點是不能控制fork出子進程的運行權限;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章