wait()函數詳細解釋:
wait(等待子進程中斷或結束)
相關函數 waitpid,fork
表頭文件
#include
#include
定義函數 pid_t wait (int * status);
函數說明
wait()會暫時停止目前進程的執行,直到有信號來到或子進程結
束。如果在調用wait()時子進程已經結束,則wait()會立即返
回子進程結束狀態值。子進程的結束狀態值會由參數status 返回,
而子進程的進程識別碼也會壹快返回。如果不在意結束狀態值,則
參數status 可以設成NULL。子進程的結束狀態值請參考waitpid()。
返回值
如果執行成功則返回子進程識別碼(PID),如果有錯誤發生則返回
-1。失敗原因存於errno 中。
附加說明
範例
#include
#include
#include
#include
main()
{
pid_t pid;
int status,i;
if(fork()= =0){
printf(“This is the child process .pid =%d\n”,getpid());
exit(5);
}else{
sleep(1);
printf(“This is the parent process ,wait for child...\n”;
pid=wait(&status);
i=WEXITSTATUS(status);
printf(“child’s pid =%d .exit status=^d\n”,pid,i);
}
}
執行
This is the child process.pid=1501
This is the parent process .wait for child...
child’s pid =1501,exit status =5
waitpid(等待子進程中斷或結束)
相關函數 wait,fork
表頭文件
#include
#include
定義函數 pid_t waitpid(pid_t pid,int * status,int options);
函數說明
waitpid()會暫時停止目前進程的執行,直到有信號來到或子進程
結束。如果在調用wait()時子進程已經結束,則wait()會立即
返回子進程結束狀態值。子進程的結束狀態值會由參數status 返回,
而子進程的進程識別碼也會壹快返回。如果不在意結束狀態值,則
參數status 可以設成NULL。參數pid 為欲等待的子進程識別碼,
其他數值意義如下:
pid0 等待任何子進程識別碼為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()。