linux c語言程式設計中《程序的管理wait函式》

2021-06-05 15:59:48 字數 2200 閱讀 1759

linux wait函式解析

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

wait(等待子程序中斷或結束)相關函式 waitpid,fork表頭檔案#include

#include

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

函式說明

wait()會暫時停止目前程序的執行,直到有訊號來到或子程序結束。如果在呼叫wait()時子程序已經結束,則wait()會立即返回子程序結束狀態值。子程序的結束狀態值會由引數status 返回,而子程序的程序識別碼也會一快返回。如果不在意結束狀態值,則引數status 可以設成null。子程序的結束狀態值請參考waitpid()。返回值如果執行成功則返回子程序識別碼(pid),如果有錯誤發生則返回-1。失敗原因存於errno 中。

附加說明

範例 一

#include

#include

#include

#include

int main()

else}執行

this is the child process.pid=1501

this is the parent process .wait for child...

child』s pid =1501,exit status =5

範例 二

#include

#include

#include

using namespace std;

int main(void)

{pid_t pid;

pid =fork();

if (pid<0)

exit(0);

else if (pid == 0)

{//如果是子程序 睡眠20秒

cout<<"children : "<

#include

定義函式 pid_t waitpid(pid_t pid,int * status,int options);

函式說明

waitpid()會暫時停止目前程序的執行,直到有訊號來到或子程序結束。如果在呼叫waitpid()時子程序已經結束,則waitpid()會立即返回子程序結束狀態值。子程序的結束狀態值會由引數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 中。

範例參考wait()。

C 中程序的應用(網路程式設計)

編寫 前新增 using system.diagnostics 1.獲取本機的 string processname 程序名成 int processid id int threadnumber 程序數 timespan cputime cpu時間 long processmemory 記憶體數量 ...

2010 07 22 Linux C 程序程式設計

1 獲取本程序id pid t getpid void 2 獲取父程序id pid t getppid void 3 建立子程序 pid t fork void 被呼叫一次,卻返回兩次,它可能有三種不同的返回值 在父程序中,fork返回新建立的子程序的pid 在子程序中,fork返回0 如果出錯,f...

LINUX C 語言 程序管理(一)

子程序和父程序的開始與結束 子程序結束的時候會向父程序傳送訊號,讓父程序幫助 程序 父程序先結束的時候,子程序會過繼到init程序下 即指定init程序為新的父程序 如果父程序因為各種原因沒有收到子程序傳送的訊號,則無法 子程序的資源,子程序會成為殭屍程序 子程序與父程序的資源 程序的記憶體區劃分 ...