linux程序簡介
pid_t fork
(void);
// pid_t 在linux中被定義為 int
示例:#include
#include
#include
intmain()
printf
("father process. %d\n"
, i)
;// 兩次執行這條print,i值不同,因為已經有了不同的位址空間。
return0;
}
執行結果:
father process. 1
child process. 2
father process. 2
殭屍程序
當乙個程序由於某種原因終止時,核心並不是立即把它從系統中清除。相反,程序被保持在一種已終止的狀態中,直到被它的父程序**。乙個終止了但還未被**的程序稱為殭屍程序。殭屍程序沒有執行,但它仍然消耗系統的記憶體資源。
殭屍程序測試**
#include
#include
#include
#include
intmain()
sleep(30
);printf
("child process pid : %d\n"
, pid)
;return0;
}
這裡子程序10s後先結束,因為父程序沒有**子程序,則子程序變成殭屍程序。
第一次ps -al
時父程序子程序都在執行,第二次ps -al
時子程序已經成為殭屍程序,但系統還未正式**此程序,pid還在。
孤兒程序
如果乙個父程序終止了,核心會安排init程序成為它的孤兒程序的養父。init程序的pid為1,是在系統啟動時由核心建立的,它不會終止,是所有程序的祖先。如果父程序沒有**它的殭屍子程序就終止了,那麼核心會安排init程序去**他們。長時間執行的程式(shell,伺服器等)應該**他們的僵死子程序。
init程序 :
孤兒程序測試**
#include
#include
#include
#include
intmain()
sleep(10
);printf
("child process pid : %d\n"
, pid)
;return0;
}
執行結果:可以看到父程序pid為25524,子程序pid為25525,等10s後再次執行ps -al
命令,看到父程序已經消失,子程序的ppid更新為1363。
本來孤兒程序應該更新ppid為1,但這裡ubuntu 16.04
指定了/sbin/upstart收養孤兒程序,屬於發行版的特殊功能吧。
守護程序
守護程序就是在後台執行,不與任何終端關聯的程序,通常情況下守護程序在系統啟動時就在執行,它們以root使用者或者其他特殊使用者(apache和postfix)執行,並能處理一些系統級的任務。習慣上守護程序的名字通常以d結尾(sshd),但這些不是必須的。
建立守護程序的大致步驟:
孤兒程序 殭屍程序 守護程序
1.孤兒程序 如果父程序先退出,子程序還沒退出,那麼子程序將被託孤給init程序 1號程序 這時子程序的父程序就是init程序 1號程序 其實還是很好理解的.2.殭屍程序 如果我們了解過linux程序狀態及轉換關係,我們應該知道程序這麼多狀態中有一種狀態是僵死狀態,就是程序終止後進入僵死狀態 zom...
Linux 孤兒程序 殭屍程序 守護程序的解釋
孤兒程序指的是在其父程序執行完成或被終止後仍繼續執行的一類程序。孤兒程序與殭屍程序是完全不同的,後面會詳細介紹殭屍程序。而孤兒程序借用了現實中孤兒的概念,也就是父程序不在了,子程序還在執行,這時我們就把子程序的ppid設為1。前面講pid提到,作業系統會建立程序號為1的init程序,它沒有父程序也不...
程序特例 殭屍程序 孤兒程序 守護程序
殭屍程序 子程序結束,父程序尚未呼叫wait 子程序資源,子程序的pcb還殘留在核心,造成資源的浪費 孤兒程序 父程序先於子程序結束,子程序成為孤兒程序,子程序修改pcb使其父程序為init程序,孤兒程序結束後,由init程序負責 其pcb資源 守護程序 daemon process 是linux中...