wait(等待子程序中斷或結束)
表頭檔案
#include
#include
定義函式 pid_t wait (int * status);
函式說明
wait()會暫時停止目前程序的執行,直到有訊號來到或子程序結
束。如果在呼叫 wait()時子程序已經結束,則 wait()會立即返
回子程序結束狀態值。子程序的結束狀態值會由引數 status 返回,
而子程序的程序識別碼也會一快返回。如果不在意結束狀態值,則
引數 status 可以設成 null。 子程序的結束狀態值請參考 waitpid( )
如果執行成功則返回子程序識別碼(pid) ,如果有錯誤發生則返回
返回值-1。失敗原因存於 errno 中。
waitpid(等待子程序中斷或結束)
表頭檔案
#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 中。
/******
* waitpid.c - ****** wait usage
*********/
#include
#include
#include
#include
#include
int main( void )
else if ( 0 == childpid )
else
exit(exit_success);
}[root@localhost src]# gcc waitpid.c
[root@localhost src]# ./a.out
in child process
child pid = 4469
child ppid = 4468
in parent
parent pid = 4468
parent ppid = 4379
child process exited with status 0
[root@localhost src]#
如果將上面「waitpid( childpid, &status, 0 );」行注釋掉,程式執行效果如下:
[root@localhost src]# ./a.out
in child process
in parent
parent pid = 4481
parent ppid = 4379
child process exited with status 1331234400
[root@localhost src]# child pid = 4482
child ppid = 1
子程序還沒有退出,父程序已經退出了。
wait函式和waitpid函式
1.殭屍程序 說明子程序結束但是沒有完全釋放記憶體 在核心中的task struct沒有釋放 該程序就會成為殭屍程序 當殭屍程序的父程序結束後就會被init程序 1號程序 接管,最終被 殭屍程序的危害 如果你不處理殭屍程序的話,那麼保留的那段資訊就不會釋放,其程序號就會一定被占用,但是系統所能使用的...
wait函式和waitpid函式
1 wait函式 當乙個程序結束時,會關閉所有的檔案描述符,釋放所有的記憶體空間,但依然儲存其pcb,核心在pcb中儲存著一些資訊。如果是正常退出,則會儲存退出狀態。如果是異常終止,則儲存是哪個訊號終止了該程序。父程序通過呼叫wait 或者waitpid 函式,來獲取這些資訊,之後徹底清除改程序。只...
wait和 wait pid函式用法
wait和 wait pid函式用法 wait的函式原型是 i nclude 提供型別pid t的定義 i nclude pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序...