巨集
說明wifexited(status)
若為正常終止子程序返回的狀態,則為真。對於這種情況可執行wexitstatus(status)。取子程序傳送給exit,_exit或_exit引數的低8位
wifsignaled(status)
若為異常終止子程序返回的狀態,則為真(接到乙個不捕捉的訊號),對於這種情況,可執行wtermsig(status),取使子程序終止的訊號編號。另外,有些實現(非single unix specification)定義巨集wcoredump(status),若已產生終止程序的core檔案,則它返回真。
wifstopped(status)
若為當前暫停子程序的返回的狀態,則為真。對於這種情況,可執行wstopsig(status),取使子程序暫停的訊號編號
wifcontinued(status)
若在作業控制暫停後已經繼續的子程序返回了狀態,則為真。(posix.1的xsi擴充套件,僅用於waitpid)。
#include
#include
pid_t wait
(int *status)
;status:是乙個整型數指標
非空:子程序退出狀態放在它所指向的位址中。
空:不關心退出狀態
返回值:如果執行成功則返回子程序id
,如果有錯誤發生則返回-
1。若正常終止子程序返回的狀態,為真,我們可以執行wexitstatus
(上表介紹)來獲取所返回的值
呼叫 wait 函式時,呼叫程序將會出現下面的情況:
- 如果其所有子程序都還在執行,則阻塞。
- 如果乙個子程序已經終止,正等待父程序獲取其終止狀態,則獲取該子程序的終止狀態然後立即返回。
- 如果沒有任何子程序,則立即出錯返回。
pid_t waitpid
(pid_t pid, int *status, int options)
;pid:
pid ==
-1 等待任一子程序。就這一方面而言,waitpid與wait等效。
pid >
0 等待其程序id與pid相等的子程序。
pid ==
0 等待其組id等於呼叫程序組id的任一子程序。
pid <
-1 等待其組id等於pid絕對值的任一子程序。
status:是乙個整型數指標
非空:子程序退出狀態放在它所指向的位址中。
空:不關心退出狀態
options:一般為wnohang
(下表介紹)
常量
說明wcontinued
若實現支援作業控制,那麼由pid指定的任一子程序在暫停後已經繼續。但其狀態尚未報告,則返回其狀態(posix.1的xsi擴充套件)
wnohang
若由pid指定的子程序並不是立即可用的,則waitpid不阻塞,此時其返回值為0
wuntraced
若某實現支援作業控制,而由pid指定的任一子程序已處於暫停狀態,並且其狀態自暫停以來還未報告過,則返回其狀態,wistopped巨集確定返回值是否對應於乙個暫停子程序
/*******************wait函式*********************/
#include
#include
#include
#include
int main()
else
if(pid ==0)
}}return0;
}
/*******************waitpid函式*********************/
#include
#include
#include
#include
int main()
else
if(pid ==0)
}}return0;
}
linux wait函式解析
程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait 就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wait就會一直阻塞在這裡,直到有乙個出現為止。wait 等待子程序中斷或結束...
linux wait函式用法
程序一旦呼叫了 wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait 就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wait就會一直阻塞在這裡,直到有乙個出現為止。wait 等待子程序中斷或結...
linux wait 與殭屍程序
在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序.但是如果該程序的父程序已經先結束了,那麼 該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃瞄當前系統 中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序,...