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

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息