linux 僵死程序的處理

2022-07-03 07:09:06 字數 578 閱讀 5332

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,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個僵死程序,並不能將其完全銷毀 一 僵死程序的產生 在每個程序退出的時候,核心釋放該程序所有的資源,...