Linux系統程式設計——特殊程式之孤兒程式
父程式執行結束,但子程式還在執行(未執行結束)的子程式就稱為孤兒程式(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux系統程式設計之程式(三):程式複製fork,孤兒程式,殭屍程式Linux程式設計
- 物聯網教程Linux系統程式設計——特殊程式之殭屍程式Linux程式設計
- 物聯網教程Linux系統程式設計——特殊程式之守護程式Linux程式設計
- 殭屍程式,孤兒程式
- linux系統程式設計之程式(一):程式與程式Linux程式設計
- 殭屍程式和孤兒程式
- Linux系統程式設計之程式介紹Linux程式設計
- 子程式、孤兒程式,殭屍程式, init程式
- Perl程式:殭屍程式和孤兒程式
- Linux系統程式設計(8)—— 程式之程式控制函式forkLinux程式設計函式
- Linux系統程式設計(37)—— socket程式設計之原始套接字Linux程式設計
- Linux系統程式設計之匿名管道Linux程式設計
- linux系統程式設計之程式(七):system()函式使用Linux程式設計函式
- Linux系統程式設計(33)—— socket程式設計之TCP程式的錯誤處理Linux程式設計TCP
- linux系統程式設計之程式(二):程式生命週期與PCB(程式控制塊)Linux程式設計
- Linux作業系統之Shell程式設計Linux作業系統程式設計
- Linux系統程式設計之檔案IOLinux程式設計
- Linux系統程式設計之程式間通訊方式:管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:管道(一)Linux程式設計
- Linux系統程式設計之程式替換:exec 函式族Linux程式設計函式
- Go Exec 殭屍與孤兒程式Go
- Linux系統程式設計之程式控制(程式建立、終止、等待及替換)Linux程式設計
- Linux系統程式設計(9)—— 程式之程式控制函式exec系列函式Linux程式設計函式
- Linux系統程式設計之程式間通訊方式:命名管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:命名管道(一)Linux程式設計
- linux系統程式設計之程式(八):守護程式詳解及建立,daemon()使用Linux程式設計
- Linux 程式設計之Shell程式設計(轉)Linux程式設計
- 孤兒程式與終端的關係
- PHP 多程式之孤兒和殭屍簡單講解PHP
- Linux系統程式設計之程式間通訊方式:訊息佇列Linux程式設計佇列
- 物聯網學習教程—Linux系統程式設計之程式介紹Linux程式設計
- (Python程式設計 | 系統程式設計 | 並行系統工具 | 程式退出)Python程式設計並行
- linux系統程式設計之程式(四):程式退出exit,_exit區別即atexit函式Linux程式設計函式
- Linux系統程式設計—有名管道Linux程式設計
- Linux系統程式設計入門Linux程式設計
- Linux系統程式設計基礎Linux程式設計
- Linux系統程式設計—共享記憶體之mmapLinux程式設計記憶體
- linux系統程式設計之管道(一):匿名管道(pipe)Linux程式設計