syswait.h,計算機程式語言函式,使用wait()和waitpid()函式時需要include這個頭檔案。
簡介,相關函式,wait()函式說明,wait()範例,waitpid()函式說明,
簡介
使用wait()和waitpid()函式時需要include這個頭檔案
![syswait.h syswait.h](http://178.128.105.246/cars-https-www.newton.com.tw/img/3/e89/nBnauMjZkNjYkhzMiNWM4EGZzUjZxEWNyMTMlVDZiFDNmVGMiFjMkVWMjdzLtVGdp9yYpB3LltWahJ2Lt92YuUHZpFmYuMmczdWbp9yL6MHc0RHa.jpg)
相關函式
wait(等待子進程中斷或結束) 相關函式 waitpid(),fork()
表頭檔案 #include #include
定義函式 pid_t wait (int * status);
waitpid(等待子進程中斷或結束) 相關函式 wait,fork
表頭檔案 #include #include
定義函式 pid_t waitpid(pid_t pid,int * status,int options);
wait()函式說明
wait()
會暫時停止目前進程的執行,直到有信號來到或子進程結束。如果在調用wait()時子進程已經結束,則wait()會立即返回子進程結束狀態值。子進程的結束狀態值會由參數status返回,而子進程的進程識別碼也會一起返回。如果不在意結束狀態值,則參數status可以設成NULL。子進程的結束狀態值請參考waitpid()。
返回值 如果執行成功則返回子進程識別碼(PID),如果有錯誤發生則返回-1。失敗原因存於errno中。
wait()範例
#include#include#include#includemain(){pid_t pid;int status,i;if(fork()= =0){printf(“This is the child process .pid =%dn”,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=^dn”,pid,i);}}
執行 This is the child process.pid=1501This is the parent process .wait for child...child’s pid =1501,exit status =5
waitpid()函式說明
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中。