1、方法一
pid_t wait (int * status);
函數(shù)說明 wait()會暫時停止目前進(jìn)程的執(zhí)行,直到有信號來到或子進(jìn)程結(jié)束。如果在調(diào)用wait()時子進(jìn)程已經(jīng)結(jié)束,則wait()會立即返回子進(jìn)程結(jié)束狀態(tài)值。子進(jìn)程的結(jié)束狀態(tài)值會由參數(shù)status 返回,而子進(jìn)程的進(jìn)程識別碼也會一快返回。如果不在意結(jié)束狀態(tài)值,則 參數(shù) status可以設(shè)成NULL。子進(jìn)程的結(jié)束狀態(tài)值請參考waitpid()。 返回值 如果執(zhí)行成功則返回子進(jìn)程識別碼(PID),如果有錯誤發(fā)生則返回-1。失敗原因存于errno中。 while( -1 != wait() )
; return 0;
2、方法二
waitpid()函數(shù)允許父進(jìn)程等待一個特定的子進(jìn)程。這個函數(shù)還允許父進(jìn)程非阻塞地檢查子進(jìn)程是否已經(jīng)終止了。
#include <sys/wait.h>
/** * * @param pid_t pid 指向返回狀態(tài)所在單元的指針和一個用來指定可選項的標(biāo)志符, * 如果pid為-1, waitpid就等待任意一個子進(jìn)程 * 如果pid大于0,waitpid就等待進(jìn)程ID為pid的那個特定的子進(jìn)程。 * 參數(shù)pid還存在另外兩種可能的值。 * 如果pid為0, waitpid就等待與調(diào)用者在同一個進(jìn)程組中的任意子進(jìn)程。 * 如果pid小于-1, waitpid就等待由pid的絕對值指定的進(jìn)程組中任意一個子進(jìn)程。 * * @param int* stat_loc 指向整數(shù)變量的指針。 * 如果stat_loc不為NULL,這些函數(shù)就將子進(jìn)程的返回狀態(tài)存儲在這個單元中。 * 子進(jìn)程通過調(diào)用exit, _exit, _Exit或從main函數(shù)中return來返回它的狀態(tài)。 * 返回值為零說明EXIT_SUCCESS;任何其它的值都說明EXIT_FAILURE。 * 父進(jìn)程只能對子進(jìn)程返回狀態(tài)的8個最低有效位進(jìn)行訪問 * * @param int options 是一個或多個標(biāo)志符按位"或"的結(jié)果。 * 即使子進(jìn)程的狀態(tài)不是立刻可用的,選項WNOHANG也會使waitpid返回。 * 選項WUNTRACED會使waitpid報告那些已經(jīng)被停止的未報告的子進(jìn)程的狀態(tài) * * @return 成功: 返回子進(jìn)程ID * 錯誤:返回-1并設(shè)置errno * 如果用選項WNOHANG調(diào)用waitpid, 則waitpid就返回0來報告可能有無人等待的子進(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){ } } 本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/billpig/archive/2009/05/09/4160613.aspx |
|