Linux-父進程wait回收子進程


1、wait工作原理

(1)、子進程結束時,系統向其父進程發送SIGCHILD信號

(2)、父進程調用wait函數后阻塞

(3)、父進程被SIGCHILD信號喚醒然后去回收僵屍子進程

(4)、父子進程之間是異步的,SIGCHILD信號機制就是為了解決父子進程之間的異步通信問題,讓父進程可以及時的去回收僵屍子進程。

(5)、若父進程沒有任何子進程則wait返回錯誤。

2、wait的參數status。status用來返回子進程結束時的狀態,父進程通過wait得到status后,就可以知道子進程的一些結束狀態信息

3、wait的返回值pid_t,這個返回值就是本次wait回收的子進程的PID。當前進程有可能有多個子進程,wait函數阻塞直到其中一個子進程結束wait就會返回,wait的返回值就可以用來判斷到底是哪一個子進程本次被回收了。

對wait做個總結:

wait主要是用來回收子進程資源,回收同時還可以得知被回收子進程的pid和退出狀態。

4、WIFEXITED、WIFSIGNALED、WEXITSTATUS這幾個宏用來獲取子進程的退出狀態。

(1)、WIFEXITED宏用來判斷子進程是否正常終止 (return、exit、_exit退出)

(2)、WIFSIGNALED宏用來判斷子進程是否非正常終止(被信號所終止)

(3)、WEXITSTATUS宏用來得到正常終止情況下的進程返回值的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM