sigchld信号
发布时间: 2023-09-04 07:07:34
『壹』 UNIX中system函数的实现为什么要阻塞SIGCHLD信号
由于来system函数的实现基本原理是源使用fork函数创建一个子进程,用子进程调用exec函数,之后将子进程运行的内容替换成了目标程序。如果不阻塞SIGCHLD信号,那么如果在调用system函数之前还创建了一个其它的子进程,那么当system函数中fork创建的子进程结束后会给父进程发送SIGCHLD信号,如果此时父进程设置的信号处理方式是捕捉而且在信号处理函数中调用了wait函数,那么system函数就无法根据其函数中创建的子进程返回状态获取相应的返回值。记得有这样的规定,system函数的返回应该是函数中创建子进程的返回状态。所以为了能保证system能够正确获取system函数中创建的子进程返回状态,SIGCHLD信号必须被阻塞。
同样,为了保证system函数不出现其它的一些问题,要求system函数要忽略SIGINT和SIGQUIT信号,如果system函数调用的程序是交互式的,如“ed”,就可能出现一些小问题。