父程序呼叫wait 函式可以**子程序終止資訊。該函式有三個功能:
① 阻塞等待子程序退出
② **子程序殘留資源
③ 獲取子程序結束狀態(退出原因)。
pid_t wait(int *status); 成功:清理掉的子程序 id;失敗:-1 (沒有子程序)
當程序終止時,作業系統的隱式**機制會:1.關閉所有檔案描述符 2. 釋放使用者空間分配的記憶體。核心的 pcb 仍存在。其中儲存該程序的退出狀態。(正常終止→退出值;異常終止→終止訊號) 1. wifexited(status) 為非0 → 程序正常結束。
wifexited(status) 為非0 → 程序正常結束
wexitstatus(status) 如上巨集為真,使用此巨集 → 獲取程序退出狀態 (exit 的引數)
wifsignaled(status) 為非0 → 程序異常終止
wtermsig(status) 如上巨集為真,使用此巨集 → 取得使程序終止的那個訊號的編號。
作用同wait,但可指定 pid 程序清理,可以不阻塞。
pid_t waitpid(pid_t pid, int *status, in options); 成功:返回清理掉的子程序 id;失敗:-1(無子程序)引數
status:(傳出)**程序的狀態
options:wnohang指定**方式為:非阻塞。為0,則阻塞。
返回值:
wpid =
waitpid(-
1,null
, wnohang)
;//**任意子程序,若沒有結束的子程序,父程序直接返回0
wpid =
waitpid
(pid,
null
, wnohang)
;//**指定的乙個子程序
wait、waitpid 依次呼叫只**乙個子程序,如果想**多個子程序,需要用迴圈 Linux系統wait 和waitpid 函式
include include pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wa...
wait函式和waitpid函式
1.殭屍程序 說明子程序結束但是沒有完全釋放記憶體 在核心中的task struct沒有釋放 該程序就會成為殭屍程序 當殭屍程序的父程序結束後就會被init程序 1號程序 接管,最終被 殭屍程序的危害 如果你不處理殭屍程序的話,那麼保留的那段資訊就不會釋放,其程序號就會一定被占用,但是系統所能使用的...
wait函式和waitpid函式
1 wait函式 當乙個程序結束時,會關閉所有的檔案描述符,釋放所有的記憶體空間,但依然儲存其pcb,核心在pcb中儲存著一些資訊。如果是正常退出,則會儲存退出狀態。如果是異常終止,則儲存是哪個訊號終止了該程序。父程序通過呼叫wait 或者waitpid 函式,來獲取這些資訊,之後徹底清除改程序。只...