為何要fork 兩次來避免產生殭屍程序?

2021-06-06 17:35:19 字數 962 閱讀 5100

當我們只fork()一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序:

目前先考慮子程序先於父程序結束的情況:     

由此,可以看出父程序與子程序有父子關係,除非保證父程序先於子程序結束或者保證父程序在子程序結束前執行waitpid(),子程序均有機會成為殭屍程序。那麼如何使父程序更方便地建立不會成為殭屍程序的子程序呢?這就要用兩次fork()了。

父程序一次fork()後產生乙個子程序隨後立即執行waitpid(子程序pid, null, 0)來等待子程序結束,然後子程序fork()後產生孫子程序隨後立即exit(0)。這樣子程序順利終止(父程序僅僅給子程序收屍,並不需要子程序的返回值),然後父程序繼續執行。這時的孫子程序由於失去了它的父程序(即是父程序的子程序),將被轉交給init程序託管。於是父程序與孫子程序無繼承關係了,它們的父程序均為init,init程序在其子程序結束時會自動收屍,這樣也就不會產生殭屍程序了。

**如下:

#include #include #include #include int main(void)

else if( pid == 0 )

if( waitpid( pid, null, 0 ) != pid )

printf( "waitpid error!\n" );

printf( "father of original!\n" );

exit( 0 );

}

執行結果如下:

wangkai@ubuntu:~/test/unix環境高階程式設計/apue.2e$ second child, parent pid = 1

wangkai@ubuntu:~/test/unix環境高階程式設計/apue.2e$

為何要fork 兩次來避免產生殭屍程序?

當我們只fork 一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序 目前先考慮子程序先於父程序結束的情況 由此,可以看出父程序與子程序有父子關係,除非保證父程序先於子程序結束或者保證父程序在子程序結束前執行waitpid 子程序均有機會成為殭屍程序。那麼如何使父程序更方便地建立不會成為殭...

為何要fork 兩次來避免產生殭屍程序?

當我們只fork 一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序 目前先考慮子程序先於父程序結束的情況 由此,可以看出父程序與子程序有父子關係,除非保證父程序先於子程序結束或者保證父程序在子程序結束前執行waitpid 子程序均有機會成為殭屍程序。那麼如何使父程序更方便地建立不會成為殭...

為何要fork 兩次來避免產生殭屍程序

最近安裝書上說的,開始搞多程序了.看到了乙個好帖子,學習學習 首先我們要明白,為什麼要避免殭屍程序 程序是一種資源,無用的程序在記憶體裡面無謂的耗費資源.當我們只fork 一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序 目前先考慮子程序先於父程序結束的情況 由此,可以看出父程序與子程序...