linux中waitpid及wait的用法

2021-08-26 19:11:49 字數 2775 閱讀 6358

wait(等待子程序中斷或結束)

表頭檔案

#include

#include

定義函式 pid_t wait (int * status);

函式說明:

wait()會暫時停止目前程序的執行,直到有訊號來到或子程序結束。

如果在呼叫 wait()時子程序已經結束,則 wait()會立即返回子程序結束狀態值。

子程序的結束狀態值會由引數 status 返回,而子程序的程序識別碼也會一起返回。

如果不在意結束狀態值,則引數 status 可以設成 null。

子程序的結束狀態值請參考 waitpid( )     

如果執行成功則返回子程序識別碼(pid) ,如果有錯誤發生則返回返回值-1。失敗原因存於 errno 中。

pid_t  pid1;  int status=0;

i=wait(&status);

i返回的是子程序的識別碼;pid

status中存的是子程序的結束狀態;可用wexitstatus(status)得到子程序的exit(3)的狀態,那麼就是3;

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

子程序還沒有退出,父程序已經退出了。

linux中waitpid函式用法

waitpid系統呼叫在linux函式庫中的原型是 include include pid t waitpid pid t pid,int status,int options 從本質上講,系統呼叫waitpid和wait的作用是完全相同的,但waitpid多出了兩個可由使用者控制的引數pid和op...

linux中w命令使用

w命令 用來檢視登入者的資訊及他們的行為。user 登入使用者名稱 tty 登入後系統分配的終端號 from 遠端主機名,即從哪登入的 login 何時登入 idle 使用者空閒時間。這是個計時器,一旦使用者執行任何操作,改計時器就會被重置。jcpu 和終端連線的所有程序占用時間。包括當前正在執行的...

Linux系統wait 和waitpid 函式

include include pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wa...