1. 僵死程序
程序呼叫exit後,儲存區已經釋放,描述符已經關閉後,核心還為每乙個程序保留了一定資訊(程序id、終止狀態、使用的cpu時間等),需要其父程序呼叫wait、waitpid。若父程序沒有對其呼叫wait。則子程序就是僵死程序。
如果父程序先於子程序結束,則該子程序父程序變成了init 1號程序,則有init為之呼叫wait。
僵死程序占用了一定的記憶體空間,如pid,核心棧
2. 僵死程序與孤兒程序
孤兒程序:父程序先於子程序結束,有init繼承父子關係
僵死程序:子程序先結束,但父程序還未對其呼叫wait
3. 處理僵死程序
(1)wait、waitpid
父程序主動去等待子程序結束
(2)sigaction訊號處理函式
父程序很忙,則用訊號註冊處理函式註冊 sigchld 訊號,在訊號處理函式裡面再呼叫wait
(3)fork兩次
父程序先fork出子程序a,然後用waitpid等待a退出,由a fork出b程序(b去做要去做的工作),然後a立刻退出,這樣a由原父程序**了,而b由於父程序先結束了變成了孤兒程序,由init去管
Linux 僵死程序及其處理方法
首先核心會釋放終止程序 呼叫了exit系統呼叫 所使用的所有儲存區,關閉所有開啟的檔案等,但核心為每乙個終止子程序儲存了一定量的資訊。這些資訊至少包括程序id,程序的終止狀態,以及該程序使用的cpu時間,所以當終止子程序的父程序呼叫wait或waitpid時就可以得到這些資訊。而殭屍程序就是指 乙個...
linux僵死程序
乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為僵死程序 zombie 的資料結構 系統呼叫exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個僵死程序,並不能將其完全銷毀 一 僵死程序的產生 在每個程序退出的時候,核心釋放該程序所有的資源,...
linux僵死程序
乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為僵死程序 zombie 的資料結構 系統呼叫exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個僵死程序,並不能將其完全銷毀 一 僵死程序的產生 在每個程序退出的時候,核心釋放該程序所有的資源,...