? ? ? 一個進程在終止時會關閉所有的文件描述符,釋放用戶空間分配的內存,但是它的PCB還保留著,內核在其中還保留著進程的一些信息:如果正常終止,則保留著退出狀態;如果異常終止則保存著導致進程種植的信號。
? ? ?在父進程中可以調用wait和waitpid函數來獲取進程信息,然后徹底清除這個進程。
? ? ?(1)wait函數
? ? ? ?函數原型及頭文件:
函數功能:1)阻塞等待子進程退出;2)回收子進程殘余資源;3)獲取子進程結束狀態。
函數返回值:成功:清理掉的子進程id,失敗:返回-1;
使用wait函數傳出參數status來保存進程的退出狀態,可以借助宏函數進一步判斷進程終止的具體原因,具體宏函數如下:
(2)waitpid函數
函數原型;
? ? ?pid_t? waitpid(pid_t pid,int *status,int options);
函數功能:作用同wait,但可以指定pid進程清理,可以不阻塞
函數參數:
? ? ??
第三個參數option參數:
? ? ? ? WNOHANG:不發生阻塞,子進程繼續運行,返回值為0;
? ? ? ? 參數為0時,等同于wait,阻塞狀態。
總結:一次wait和waitpid只能清理一次子進程。