天天看點

回收子程序

回收子程序的函數:

pid_t wait(int *status);//成功:清理掉的子程序ID;失敗:-1(沒有子程序)
           

當程序終止時,作業系統的隐式回收機制會:1.關閉所有檔案描述符2.釋放使用者空間配置設定的記憶體。核心的PCB仍存在。其中儲存該程序的退出狀态。(正常終止——>退出值;異常終止——>終止信号)

可使用wait函數傳出參數status來儲存程序的退出狀态。借助宏函數來進一步判斷程序終止的具體原因。宏函數可分為如下三組:

1.WIFEXITED(status)為非0 ——>程序正常結束
WEXITSTATUS(status)如上宏為真,使用此宏——>擷取程序退出狀态(exit的參數)

2.WIFSIGNALED(status)為非0——>程序異常終止
WTERMSIG(status)如上宏為真,使用此宏——>取得使程序終止的那個信号的編号。

3.WIFSTOPPED(status)為非0——>程序處于暫停狀态
WSTOPSIG(status)如上宏為真,使用此宏——>取得使程序暫停的那個信号的編号。
WIFCONTINUED(status)為真——>程序暫停後已經繼續運作
           

waitpid函數

作用同wait,但可指定pid程序清理,可以不阻塞

pid_t waitpid(pid_t pid,int * status,int options);成功:傳回清理掉的子程序ID:失敗:-1(無子程序)

特殊參數和傳回情況:

參數pid:

大于0回收指定ID的子程序

負一回收任意子程序(相當于wait)

0回收和目前調用waitpid一個組的所有子程序

小于負一回收指定程序組内的任意子程序

傳回0:參3為WNOHANG,且子程序正在運作。

注意一次wait或waitpid調用隻能清理一個子程序,清理多個子程序應使用循環。

繼續閱讀