Linux系統程式設計——特殊程式之孤兒程式

千鋒教育官方發表於2019-08-29

父程式執行結束,但子程式還在執行(未執行結束)的子程式就稱為孤兒程式(Orphan Process )。孤兒程式最終會被 init 程式(程式號為 1 )所收養,並由 init 程式對它們完成狀態收集工作。

孤兒程式是沒有父程式的程式,為避免孤兒程式退出時無法釋放所佔用的資源而變為殭屍程式(什麼是殭屍程式,請看《殭屍程式》),程式號為 1 init 程式將會接受這些孤兒程式,這一過程也被稱為 收養 init 程式就好像是一個孤兒院,專門負責處理孤兒程式的善後工作。每當出現一個孤兒程式的時候,核心就把孤 兒程式的父程式設定為 init ,而 init 程式會迴圈地 wait() 它的已經退出的子程式。這樣,當一個孤兒程式淒涼地結束了其生命週期的時候, init 程式就會代表黨和政府出面處理它的一切善後工作。因此孤兒程式並不會有什麼危害。

 

注意:如果是64 位系統,孤兒程式的父程式號並不是 1 號。

孤兒程式的測試例子:

#include <stdio.h>  

#include <stdlib.h>  

#include <unistd.h>  

#include <errno.h>  

  

int main()  

{  

    pid_t  pid;  

    //建立程式  

    pid = fork();  

      

    if (pid < 0){ // 出錯  

        perror("fork error:");  

        exit(1);  

    }else if (pid == 0){//子程式  

        sleep(2); // 保證父程式先結束  

          

        printf("son proess: [son id] = %d, [son's father id] = %d\n", getpid(), getppid());  

          

        exit(0);  

          

    }else if(pid > 0){ // 父程式  

        printf("father process, i am exited\n");  

          

        exit(0);  

    }  

      

    return 0;  

}  

 

執行結果如下:

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2655391/,如需轉載,請註明出處,否則將追究法律責任。

相關文章