子进程终止或者停止时,会将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)