作者jerry900287 (滷蛋)
看板Grad-ProbAsk
標題[理工] [OS] fork()與execlp()
時間Fri Sep 30 22:34:43 2016
嗨嗨 各位大大
小魯讀OS讀到fork的執行有一個疑問
一個 Process 有 data sec 和 code sec 這兩個區段
void main()
{
int i ;
i = fork();
if(i < 0)
{
printf("fork failed")
exit(-1)
}
else if (i == 0)
{
execlp("......")
}
else
{
wait()
printf("child complete")
exit(0)
}
}
據我所知,當執行fork()後會迸出child process
而child process 的 data sec 和 code sec 區段都是來自parent process的複製
只是都是不同記憶體位置
那麼我的疑問是
在child process 執行了execlp()這個指令後
原先的 code sec 會被載入的檔案覆蓋成新載入檔案的code sec
那麼原先從parent process複製過來的data sec呢
也會被載入的檔案覆蓋成新載入檔案的data sec 嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.138.52.33
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1475246087.A.839.html
推 ken52011219: 有EXECLP就會 但這裡可以比較著重在wait() 這段code 09/30 22:45
→ ken52011219: 很重要 假如沒有wait() 父process有可能自行先做完 09/30 22:46
→ ken52011219: 導致 正確結果沒有回傳到父PROCESS 程式就結束了 09/30 22:46
→ ken52011219: 此時 子程式還在執行 這時就稱為Zombies Process 09/30 22:47
→ ken52011219: 另外 反之 沒有EXECLP() 指令就不會 09/30 22:48
哇 大大太強惹>< 還有補充感激不盡 謝謝!!
※ 編輯: jerry900287 (140.138.52.33), 09/30/2016 22:50:03