2009-09-29 264 views

回答

16

您必須使子進程守護進程才能在父親死亡(或死亡)時將其殺死,否則它們將被init(1)採用。

+1

下面是鏈接如果您對如何創建殭屍進程感興趣並嘗試如何處理您的系統,請創建一個殭屍進程: http://www.unix.com/unix-dummies-questions-answers/100737-how- do-you-create-zombie-process.html – Klathzazt 2009-09-29 10:55:00

+4

守護進程,父進程,父進程,子進程和殭屍進程。 電腦講述了這樣一個有趣而異想天開的故事。 – jwarner112 2013-09-30 17:02:39

23

不,當父母死亡時,子進程不一定會被殺死。

但是,如果孩子有一個打開的管道正在寫入並且父母正在讀取,它將在下一次嘗試寫入管道時收到SIGPIPE,對此,默認操作是將其殺死。這通常是在實踐中發生的。

8

在UNIX上,父進程和子進程的生存期之間沒有強制關係。嚴格地說,進程只會在調用exit()或者接收一個未處理的信號時終止,而這個信號的默認行爲是終止的。

然而,當用戶在終端上點擊ctrl-C,ctrl-等時,「控制終端」中的整個「前臺進程組」可以接收到像SIGINT和SIGQUIT這樣的信號。具體行爲部分由登錄shell實現(在tty驅動程序的幫助下)。細節可能相當複雜:外觀herehere

-9

你只需要知道你想殺死哪個進程或服務。在我的情況下,httpd是。

killall -9 httpd 

它會殺死httpd的所有子進程。

+0

完全錯過了問題的要點。 – 2012-11-14 02:46:57

+0

這篇文章不回答提出的問題,並且由於其他答案的作用,您可能希望刪除這篇文章。 – 2012-11-14 02:47:50

-1

如果您關閉終端pid,這是進程的父進程ID,則終端將被關閉。當終端關閉時,它的所有進程也會被殺死。但是,如果你在shell中創建一個子shell,那麼如果你創建了任何進程並殺死該進程的ppid,那麼只有該子shell kill和他們的子成爲孤兒。他們的父母成爲init並且pid是1.

[學員@ SIPL〜] $ ps -ef | grep睡眠實習生3893 3870 0 10:55 pts/1 00:00:00 sleep 4000實習生3895 3788 0 10:55 pts/0 00:00:00 grep --color =自動睡眠[實習生@ SIPL〜] $ kill - 9 3870 [學員@ SIPL〜] $ ps -ef | grep睡眠受訓者3893 1 0 10:55 pts/1 00:00:00 sleep 4000受訓者3906 3788 0 10:55 pts/0 00:00:00 grep --color =自動睡眠