如果乙個程序fork乙個子程序,但不要它等待子程序終止,也不希望子程序處於僵死狀態直到父程序終止,實現這一要求的技巧是呼叫fork2次。
下面是例項**:
#include #include #include int main(void)
else if(pid == 0)
if(waitpid(pid, null, 0) != pid)
printf("error, waitpid error.\n");
exit(0);
}
第二個字程序呼叫sleep以保證在列印父程序id時第乙個字程序已終止。在fork之後,父子程序都可以繼續執行,並且我們無法預知哪個會限制性。在fork之後,如果不是第二個子程序休眠,那麼它可能比其父程序先執行,於是它列印的父程序id將是建立它的父程序,而不是init程序。
一下是執行結果
jay@jay-vibox:~/workspace/unix/8-5$ cc main.c
jay@jay-vibox:~/workspace/unix/8-5$ ./a.out
jay@jay-vibox:~/workspace/unix/8-5$ second child, parent pid = 1
呼叫 fork 兩次以避免僵死程序
當我們只fork 一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序 目前先考慮子程序先於父程序結束的情況 由此,可以看出父程序與子程序有父子關係,除非保證父程序先於子程序結束或者保證父程序在子程序結束前執行waitpid 子程序均有機會成為殭屍程序。那麼如何使父程序更方便地建立不會成為殭...
apue 8 5呼叫fork兩次以避免僵死程序
呼叫fork兩次以避免僵死程序 include apue.h include int main void else if pid 0 sleep 20 printf second child,parent pid d n getpid exit 0 第二個子程式退出 if waitpid pid,n...
為何要fork 兩次來避免產生殭屍程序?
當我們只fork 一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序 目前先考慮子程序先於父程序結束的情況 由此,可以看出父程序與子程序有父子關係,除非保證父程序先於子程序結束或者保證父程序在子程序結束前執行waitpid 子程序均有機會成為殭屍程序。那麼如何使父程序更方便地建立不會成為殭...