Linux為什么要設計一個“僵尸進程”狀態?
最近看Linux進程狀態,其中描述一個僵尸進程狀態,這種狀態下進程已經不能執行了,只保留一個記錄,而這樣做的目的是讓其父親進程知道其狀態;但有的父進程不關心這樣子進程,因此可能導致有些進程一直處于僵死狀態。那么我想到一個問題:為什么設計這樣一個狀態而不強制父進程必須了解它?另外,父進程沒有其他辦法知道其子進程了嗎?
posted on 2011-05-23 23:08 笨笨 閱讀(2404) 評論(12) 編輯 收藏 引用 所屬分類: Linux
留下點回憶
posted on 2011-05-23 23:08 笨笨 閱讀(2404) 評論(12) 編輯 收藏 引用 所屬分類: Linux
打個比方,你跟你老婆生了孩子,誰來養活孩子?
在世界各國都是你們倆的義務
回復 更多評論
@sxpropeht
這個比方不恰當,這個新的進程已經不需要主進程養活了。另外,這個進程已經死了,還需要等待父進程來處理,而同時系統也不強制父進程必須處理。
這才是我像了解的。。 回復 更多評論
@笨笨
一個父進程派生了一個子進程, 那么這個父進程有可能想知道,子進程的終止狀態。如果父進程沒有獲取這個狀態,那么子進程就變為zombie,直到父進程用wait來獲取。如果沒有這個狀態,子進程直接結束。那么父進程就不會知道子進程的終止狀態了。這個終止狀態以用來判斷子進程終止的原因,有些時候還是挺重要的。比如 ,是不是正常終止,是由什么信號終止的。。。詳細說明可以參考unix高級環境編程 第八章進程控制,第六節 回復 更多評論
我想笨笨想問的是為什么父進程不被強制要求處理,如果不處理有什么不好的后果。 回復 更多評論
@hstcscolor
謝謝你的詳細解釋。
不過我想父進程除了使用wait之外就沒有辦法知道子進程的狀態了嗎?
(我對linux不是很熟悉) 回復 更多評論
@巫云
我基本上是這個意思;既然有僵尸進程帶來的缺點,為什么不強制設置必須讓每個主進程等待。。。難道是為了避免父進程先退出的尷尬?貌似漸漸有些能理解了。。。 回復 更多評論
我覺得還有一個有意思的語意
既然是從你這fork的,你必然關注啊
不然的話就沒從你這fork的意義了 回復 更多評論
wait() 獲取子進程的退出狀態。若無,則阻塞。
我覺得設計的挺好的。
回復 更多評論
其實可以使用sigaction捕捉SIGCHLD信號,并設置flag標志使其不產生僵死子進程的。
如果強制父進程必須了解子進程的狀態,我覺得這才不好,正如你所說的,有的父進程并不關心它的子進程。而且父進程先結束的話,子進程是會被init進程領養的。
我覺得不是因為父進程fork了一個子進程就必須了解它。
了解與不了解,由父進程自己決定,這不是很好么? 回復 更多評論
| 只有注冊用戶登錄后才能發表評論。 | ||
|
||
|
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
|