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