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,其實是乙個無符號整形 乙個程序標示符對應唯一的乙個程序,多個程序標示符可以對應同乙個程式 程序和程式的區別 程式 可執行的二進位制 檔案,這種檔案載入到記憶體中執行就得到了乙個程序 程序 同乙個程式...