一、摘要
詳解父進程、子進程、守護進程的區別,例子稍候補充
二、定義區別
-
主進程
程序執行的入口,可以理解為常用的main 函數 -
父進程
對於子進程而言, 子進程的創造者,可有多個子進程。 任何進程都有父進程,追根溯源是系統啟動程序。對於我們一般寫的程序,主進程是最初始的父進程。 -
子進程
對於父進程而言, 父進程創建的進程, 子進程只能對應一個父進程。 -
守護進程
我們常言的daemon 進程,是子進程的一種狀態,標記子進程與父進程同死。如果沒有標記daemon , 則殺死父進程,與子進程的運行狀態沒有半分影響。 -
僵屍進程
因為某些子進程沒有設置daemon 屬性,如果殺死父進程,其子進程將會變成“僵屍進程”。僵屍進程的父進程將成為init 進程的子進程。為避免僵屍進程,一般:
- 設置父進程的SIGCHLD信號處理函數為 SIG_IGN (忽略信號)
- fork 兩次並殺次以及子進程,令二級子進程成為僵屍進程,成為init子進程,並被清理