請在C考慮下面的代碼:確實linux永遠不會結束子進程,直到父節點結束?
int main()
{
pid_t cpid;
cpid = fork();
if (cpid == -1)
{
perror("fork");
return 0;
}
if (cpid == 0)
{
printf("I'm child\n");
_exit(0);
}
else
{
while(1)
{
printf("I'm parent\n");
sleep(1);
}
}
return 0;
}
運行代碼後,我希望它運行的孩子,離開它一旦完成。 但是當我運行
pgrep executable_name
或
ps fax
它顯示的子進程ID,如果它只是工作過程的歷史垃圾或它確實沒有結束/終止我不知道孩子的過程?
在此先感謝
爲了清楚起見:* only *當進程處於「殭屍」狀態時進程表條目存活;所有其他資源都被釋放。 – zwol
好吧,這是一個解決方案,並感謝您給出的原因,但不等待父母,直到孩子的狀態改變?我想要叉的並行化在第一個地方 – madz
是的,等待塊。你也可以設置一個SIGCHLD處理程序,並且只有等到它被觸發時才能確保它不會被阻塞。信號在小孩終止時發送。您也可以忽略它,孩子在父母結束時會自動清理。 –