popen使用不當引起產生僵屍進程


FILE * popen(const char * command, const char * type)
popen函數會通過fork產生子進程,然后從子進程中調用/bin/sh -c執行參數command指令,子進程退出的時候會發送SIGCHLD信號,如果父進程沒對此信號處理,就會導致僵屍進程,因此建議有用到popen的都加個signal(SIGCHLD, SIG_IGN);

SIG_IGN表示忽略對信號SIGCHLD的處理,

 

或者調用wait()

會暫時停止目前進程的執行,直到有信號來到或子進程結束。如果在調用 wait() 時子進程已經結束,則 wait() 會立即返回子進程結束狀態值。子進程的結束狀態值會由參數 status 返回,而子進程的進程識別碼也會一快返回。


免責聲明!

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



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