Linux程序控制(三)wait

2021-08-24 18:03:40 字數 908 閱讀 6221

5. wait系列函式

#include

pid_t wait(int *statloc);

pid_t waitpid(pid_t pid,  int *statloc,  int options);

若成功,返回程序id;若出錯,返回0或-1

程序呼叫wait/waitpid:

若所有子程序還在執行,wait/waitpid阻塞;

若有乙個子程序終止,wait/waitpid返回,並取得子程序的終止狀態,終止狀態儲存在statloc指向的單元內,不關心狀態可將statloc設定為null;

若沒有子程序,出錯返回。

判斷狀態的4個巨集定義(為真):

wifexited(status):正常終止

wifsignaled(status):異常終止

wifstopped(status):暫停

wifcontinued(status):繼續

兩個函式的區別:

(1)等待子程序終止的方式:

如果有多個子程序,當某一子程序終止,則wait立刻返回;

waitpid可以選擇所等待的程序,當waitpid的pid引數為-1,與wait等效;pid>0,等待該pid子程序;pid=0,組id等於呼叫程序組id的任一子程序;pid<-1,等待組id等於pid絕對值的任一子程序。

(2)阻塞方式:

在乙個子程序終止前,wait阻塞;

waitpid的options引數為wnohang,waitpid不阻塞。

(3)對作業控制的支援:

waitpid的options引數為wcontinued,由pid指定的任一子程序在停止後已經繼續,但其狀態尚未報告,則返回其狀態;

options為wuntraced,由pid指定的任一子程序已處於停止狀態,並且尚未報告其狀態,則返回其狀態。

三 程序控制

程序控制的主要功能是對系統中的所有程序實施有效的管理,它具有建立新程序 撤銷已有程序 實現程序狀態之間的轉換等功能。簡而言之就是 程序控制就是實現程序狀態的轉換。使用原語實現,原語的執行具有原子性,會一氣呵成。思考 那麼為何程序控制 狀態轉換 過程要一氣呵成呢?如果不能一氣呵成,就有可能導致作業系統...

程序控制之wait和waitpid函式

當乙個程序正常或異常終止時,核心就向其父程序傳送sigchld訊號。因為子程序終止是個非同步事件 這可以在父程序執行的任何時候發生 所以這種訊號也是核心向父程序發的非同步通知。父程序可以選擇忽略該訊號,或者提供乙個該訊號發生時即被呼叫執行的函式 訊號處理程式 對於這種訊號的系統預設動作是忽略它 呼叫...

linux 程序控制

什麼是程序 每乙個程序在系統中都有唯一的id標示它,此id為程序標示符 程序標示符的型別 pit t,其實是乙個無符號整形 乙個程序標示符對應唯一的乙個程序,多個程序標示符可以對應同乙個程式 程序和程式的區別 程式 可執行的二進位制 檔案,這種檔案載入到記憶體中執行就得到了乙個程序 程序 同乙個程式...