1.程序的等待
wait函式或waitpid程序可能發生如下情況;
(1)如果所有的子程序孩子執行,則阻塞(block)
(2)如果乙個子程序已經終止,正等待父程序獲取其終止狀態,則取得孩子程序的終止狀態返回
(3)如果她沒有任何子程序,則立即出錯返回
函式的原型:
#include
pid_t wait(int *status);
說明:wait函式會暫時停止目前程序執行,直到有訊號來到或者子程序結束。如果在呼叫wait時,子程序已經結束,則wait會立即返回子程序的結束狀態值。如果不在意子程序的返回狀態,可將引數status設為null。若成功返回子程序識別碼(pid),若有錯誤發生則返回-1.
pid_t waitpid(pid_t pid,int *status,int options);
說明:返回值:若成功返回程序id,若出錯返回-1.waitpid會暫停目前的程序執行,直到有訊號或者子程序結束。
如果不在意結束時狀態值,則status可以設成null.引數pid為欲等待的子程序識別碼,其他值意義如下:
(1)pid < -1 等待程序組識別碼為pid絕對值的任何子程序
(2)pid = -1等待任何子程序,此時就相當於wait()
(3)pid = 0等待程序組識別碼與目前程序相同的任何子程序
(4)pid > 0等待任何子程序識別碼為pid的子程序
引數options可以設為0 或者與下面的組合:
(1)wnohang 若沒有任何已經結束的子程序則馬上返回,不等待
(2)wuntraced如果子程序進入暫停執**況馬上返回,但結束的狀態不予理會
2.wait和waitpid的區別:
(1)在任何乙個子程序終止前,wait使其呼叫者阻塞,而waitpid有乙個選項,可以使呼叫者不阻塞。
(2)waitpid並不等待在其呼叫之後的第乙個終止的子程序。它若有若干個選項,可以控制它所等待的程序。如果乙個子程序已經終止,並且是僵死程序,wait函式立即返回並取得該子程序的狀態,否則wait使其呼叫者阻塞直到乙個子程序終止。如果呼叫者阻塞並有多個子程序時,則在乙個子程序終止時,wait立即返回,因為wait返回終止子程序的id。
僵死程序:乙個已經終止,但是父程序尚未對其進行善後處理(獲得終止子程序的有關資訊,並且釋放資源)的程序被稱為僵死程序。
例子參看linux**。
等待程序結束wait
include include pid t wait int status status 子程序結束時返回的終止狀態 子程序是怎麼結束的 status是乙個傳出引數 如果父程序不關心子程序的狀態,向wait中傳入null 功能 等待子程序結束 阻塞等待 成功 返回子程序的pid,失敗 返回 1擴充套...
程序的等待 wait函式
wait函式 include include pid t wait int status 功能 等待子程序終止,如果子程序終止了,此函式會 子程序的資源。呼叫wait函式的程序會掛起,直到它的乙個子程序退出或收到乙個不能被忽視的訊號時才被喚醒。若呼叫程序沒有子程序或它的子程序已經結束,該函式立即返回...
等待子程序結束wait 和waitpid
父子程序有時需要簡單的程序間同步,如父程序等待子程序的結束。linux提供了以下兩個等待函式 wait waitpid 需要包含標頭檔案 include include 1 pid t wait int status 功能 等待任一子程序終止,如果子程序終止了,此函式會 子程序的資源。呼叫wait函...