1、方法一
pid_t wait (int * status);
函數(shù)說明
wait()會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行,直到有信號(hào)來到或子進(jìn)程結(jié)束。如果在調(diào)用wait()時(shí)子進(jìn)程已經(jīng)結(jié)束,則wait()會(huì)立即返回子進(jìn)程結(jié)束狀態(tài)值。子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù)status 返回,而子進(jìn)程的進(jìn)程識(shí)別碼也會(huì)一快返回。如果不在意結(jié)束狀態(tài)值,則
參數(shù)
status可以設(shè)成NULL。子進(jìn)程的結(jié)束狀態(tài)值請(qǐng)參考waitpid()。
返回值
如果執(zhí)行成功則返回子進(jìn)程識(shí)別碼(PID),如果有錯(cuò)誤發(fā)生則返回-1。失敗原因存于errno中。
while( -1 != wait() )
;
return 0;
2、方法二
waitpid()函數(shù)允許父進(jìn)程等待一個(gè)特定的子進(jìn)程。這個(gè)函數(shù)還允許父進(jìn)程非阻塞地檢查子進(jìn)程是否已經(jīng)終止了。
#include <sys/wait.h>
/**
*
* @param pid_t pid 指向返回狀態(tài)所在單元的指針和一個(gè)用來指定可選項(xiàng)的標(biāo)志符,
* 如果pid為-1, waitpid就等待任意一個(gè)子進(jìn)程
* 如果pid大于0,waitpid就等待進(jìn)程ID為pid的那個(gè)特定的子進(jìn)程。
* 參數(shù)pid還存在另外兩種可能的值。
* 如果pid為0, waitpid就等待與調(diào)用者在同一個(gè)進(jìn)程組中的任意子進(jìn)程。
* 如果pid小于-1, waitpid就等待由pid的絕對(duì)值指定的進(jìn)程組中任意一個(gè)子進(jìn)程。
*
* @param int* stat_loc 指向整數(shù)變量的指針。
* 如果stat_loc不為NULL,這些函數(shù)就將子進(jìn)程的返回狀態(tài)存儲(chǔ)在這個(gè)單元中。
* 子進(jìn)程通過調(diào)用exit, _exit, _Exit或從main函數(shù)中return來返回它的狀態(tài)。
* 返回值為零說明EXIT_SUCCESS;任何其它的值都說明EXIT_FAILURE。
* 父進(jìn)程只能對(duì)子進(jìn)程返回狀態(tài)的8個(gè)最低有效位進(jìn)行訪問
*
* @param int options 是一個(gè)或多個(gè)標(biāo)志符按位"或"的結(jié)果。
* 即使子進(jìn)程的狀態(tài)不是立刻可用的,選項(xiàng)WNOHANG也會(huì)使waitpid返回。
* 選項(xiàng)WUNTRACED會(huì)使waitpid報(bào)告那些已經(jīng)被停止的未報(bào)告的子進(jìn)程的狀態(tài)
*
* @return 成功: 返回子進(jìn)程ID
* 錯(cuò)誤:返回-1并設(shè)置errno
* 如果用選項(xiàng)WNOHANG調(diào)用waitpid, 則waitpid就返回0來報(bào)告可能有無人等待的子進(jìn)程,但這些子進(jìn)程的狀態(tài)不可用
*
*/
pid_t waitpid(pid_t pid, int *stat_loc, int options);
void waitchild(int signo)
{
pid_t pid;
while((pid = waitpid(-1,NULL,WNOHANG))>0){
}
}
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。