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 返回,而子進程的進程識別碼也會一快返回。