2013-06-23 79 views
-3

只有1個問題,當我fork()時,我創建了父進程和子進程。我的孩子還在跑步時可以終止父母嗎?需要深入解釋fork和exec

基本在這張圖上? Differences between fork and exec

if(!fork()) 
{ 
    //child 
    while(1); 
} 
else 
{ 
    //parent 
    exit(); 
} 

另一種情況是,如果我的孩子終止。我的父母能夠從main獲得返回值嗎?如果是的話,我如何檢索價值?

exec和execlp有什麼不同?

最後,我明白,當你exec你覆蓋內存(堆,堆棧,文本,數據)。基本上,調用新的.exe。但在PCB下?只有PID,PPID保持而狀態和sp全部覆蓋?

+1

考慮做一些初步的搜索。而且,假設您使用的是基於unix的系統,請考慮閱讀「man」頁面 – rliu

回答

1

當你fork,你創建一個完整的新的和單獨的過程。孩子繼承了某些方面,如打開的文件描述符和其他東西。 所以你可以退出父母,孩子會繼續跑步。

爲了檢索孩子的退出代碼和狀態,您可以使用pid_t waitpid(pid_t pid, int *status, int options);並相應地解釋狀態。事實上,爲了避免Zombiprocesses,你應該等待孩子。

exec系列在當前正在運行的進程中創建一個新的可執行文件,所以PID仍然存在,但執行狀態已初始化。