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()it

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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息