函式 waitpid 等待子程序中斷或結束

2021-06-20 08:52:57 字數 1225 閱讀 6946

2011-08-29 15:40

378人閱讀收藏

舉報 null

waitpid - 等待子程序中斷或結束

相關函式

wait,fork

表頭檔案

#include

#include

定義函式

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

函式說明

waitpid()會暫時停止目前程序的執行,直到有訊號來到或子程序結束。如果在呼叫wait()時子程序已經結束,則wait()會立即返回子程序結束狀態值。子程序的結束狀態值會由引數status返回,而子程序的程序識別碼也會一快返回。如果不在意結束狀態值,則引數status可以設成null。

引數pid為欲等待的子程序識別碼,其他數值意義如下:

pid<-1 等待程序組識別碼為pid絕對值的任何子程序。

pid=-1 等待任何子程序,相當於wait()。

pid=0 等待程序組識別碼與目前程序相同的任何子程序。

pid>0 等待任何子程序識別碼為pid的子程序。

引數option可以為0 或下面的or 組合

wnohang 如果沒有任何已經結束的子程序則馬上返回,不予以等待。

wuntraced 如果子程序進入暫停執**況則馬上返回,但結束狀態不予以理會。

子程序的結束狀態返回後存於status,底下有幾個巨集可判別結束情況

wifexited(status)如果子程序正常結束則為非0值。

wexitstatus(status)取得子程序exit()返回的結束**,一般會先用wifexited 來判斷是否正常結束才能使用此巨集。

wifsignaled(status)如果子程序是因為訊號而結束則此巨集值為真

wtermsig(status)取得子程序因訊號而中止的訊號**,一般會先用wifsignaled 來判斷後才使用此巨集。

wifstopped(status)如果子程序處於暫停執**況則此巨集值為真。一般只有使用wuntraced 時才會有此情況。

wstopsig(status)取得引發子程序暫停的訊號**,一般會先用wifstopped 來判斷後才使用此巨集。

返回值

如果執行成功則返回子程序識別碼(pid),如果有錯誤發生則返回-1。失敗原因存於errno中。

範例

參考wait()。

等待子程序結束wait 和waitpid

父子程序有時需要簡單的程序間同步,如父程序等待子程序的結束。linux提供了以下兩個等待函式 wait waitpid 需要包含標頭檔案 include include 1 pid t wait int status 功能 等待任一子程序終止,如果子程序終止了,此函式會 子程序的資源。呼叫wait函...

程序的等待(wait和waitpid)

1.程序的等待 wait函式或waitpid程序可能發生如下情況 1 如果所有的子程序孩子執行,則阻塞 block 2 如果乙個子程序已經終止,正等待父程序獲取其終止狀態,則取得孩子程序的終止狀態返回 3 如果她沒有任何子程序,則立即出錯返回 函式的原型 include pid t wait int...

測試是否可以 waitpid 子程序的子程序

雖然 man waitpid 裡寫明作用的物件是子程序,我還是測試下是否可以 waitpid 子程序的子程序.以下為測試 其中用一塊 sizeof int 大小的共享記憶體傳遞子程序的子程序 pid.include include include include include include in...