子进程终止或者停止时,会将SIGCHID信号发送给其父进程,但是系统默认是忽略此信号。如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。
执行system函数时,SIGCHLD信号,最好被显示,因为system函数中,使用到了fork(),waitpid.如果父进程忽略了SIGCHID信号,waitpid就没有不能得到子进程的SIGCHLD信号,那么处理的返回值就会有问题。system的返回值也会有问题。通常的做法是:
signal( SIGCHLD, SIG_DFL );
system( command );
signal( SIGCHLD, SIG_IGN );
建议: 最好自己利用fork和waitpid封装一个类似system的函数, 并且多一个超时的参数配置。
形如:SAFE_system(char* cmd, long timeout)
本文介绍了在使用system函数时如何正确处理SIGCHLD信号的方法。为了避免由于忽略此信号导致的system函数返回值错误,建议先设置SIGCHLD信号为默认处理方式,执行完system函数后再忽略该信号。同时推荐自行封装类似system的函数,并增加超时参数。
167万+

被折叠的 条评论
为什么被折叠?



