zombie process and orphan process

在windows下,一個進程中的線程可以調用CreateProcess來創建一個新進程。在新的進程運行之前,它們的關係可認爲是父子關係。當新進程運行之後,它們之間不再是父子進程關係,而是兩個平等的進程。

而在Linux下,一個進程通過調用System,fork等函數創建一個新進程後,他們的關係就是父子進程關係。在Linux下,所有的進程都是init進程的子進程。就是說所有的進程(當然,除了init進程)都是init進程的後代,對任何一個非init進程,它都有父進程。

zombie process和orphon process是Linux下的概念,因爲它們產生的原因都源自父子進程的這個關係。

一個子進程結束之後,系統會釋放它所佔用的資源,但它在進程表中的項必須等父進程調用wait系列(wait,waitpid等)讀取子進程的退出狀態(exit code)之後纔會被釋放。這樣,如果父進程一直不調用wait系列函數,那麼這個子進程對應的進程表項就會一直存在。這個結束的子進程就叫zombie process。

zombie process無法通過kill函數來結束。只能通過父進程調用wait系列函數來結束。或者等父進程結束,由上一級父進程調用wait,如果都沒有調用wait,就一直zombie process到成爲init進程的子進程,init進程會調用wait系列函數來結束它。

如果一個子進程結束之前,它的父進程結束了,那麼這個子進程就叫orphan process。它會自動成爲其祖父進程的子進程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章