僵死程序 子程序退出的非同步善後處理

2021-06-27 03:04:03 字數 971 閱讀 3582

一、僵死程序:子程序先於父程序執行完畢後,因為子程序的退出碼需要儲存起來供父程序隨後呼叫wait使用,但子程序的資料結構等占用資源不會立刻被刪除,                                      這就是僵死程序。

二、子程序退出的非同步善後處理

(1)了避免僵死程序長期占用資源,父程序可以呼叫wait 或者waitpid暫時停止執行,等待子程序終止執行後,在繼續執行父程序。

(2)wait函式說明:

#include

#include

pid_t  wait(int *stat_loc);

返回值:已經結束的子程序id代表成功,-1代表失敗。(提問,如果很多子程序,返回值子程序id,如何確定哪個子程序出現問題?)

(3)waitpid函式呼叫

#include

#include

pid_t waitpid(pid_t pid, int *stat_loc,int options);

引數說明:pid代表父程序希望等待的某個子程序。如果為-1,則代表返回任何乙個子程序的資訊。

*stat_loc  代表退出碼

options引數允許修改waitpid的行為,wnohang選項表示呼叫該函式的程序不會掛起,而且繼續執行。

(4)非同步善後處理

linux機制提供訊號來實現程序間通,當程序收到sigchld訊號,於是父程序可以在處理程式中進行子程序退出後的處理。

void  sigchld_handler(int signo);

while(pid>0);

}

通過執行waitpid迴圈,使用wnohang選項,當pid<=0時,表示無程序  退出,於是訊號處理結束,返回父程序被訊號中斷的位置處繼續處理。

Linux程序 程序的退出

linux程序 程序的退出 2011 12 27 20 44 56 分類 linux void exit int status 注意點 1.status表明了程序終止時的狀態。當子程序使用 exit 後,父程序如果在用wait 等待子程序,那麼wait 將會返回status狀態,注意只有status...

linux 僵死程序的處理

1.僵死程序 程序呼叫exit後,儲存區已經釋放,描述符已經關閉後,核心還為每乙個程序保留了一定資訊 程序id 終止狀態 使用的cpu時間等 需要其父程序呼叫wait waitpid。若父程序沒有對其呼叫wait。則子程序就是僵死程序。如果父程序先於子程序結束,則該子程序父程序變成了init 1號程...

linux 中的僵死程序和孤兒程序

當我們使用建立程序的函式fork vfork 等,建立了子程序 1.子程序先於父親程序退出,會造成子程序的程序編號無法釋放.程序編號的範圍很大,但不應該隨意浪費 2.子程序後於父親程序退出,子程序會交給init 程序管理.3.乙個程序在執行完畢後,系統會自動清空其存在的程序的相關資源 結合上面說明,...