Linux wait和waitpid 的區別

2021-10-19 13:27:56 字數 1995 閱讀 9700

巨集

說明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 他,那麼他將變成乙個殭屍程序.但是如果該程序的父程序已經先結束了,那麼 該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃瞄當前系統 中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序,...