聚合全网技术文章,根据你的阅读喜好进行个性推荐
对于LZ封装的pox_system函数,有一个问题:如果在system函数执行时,某个子进程挂了,此时SIGCHLD信号被忽视掉了。可能会导致对于子进程的后处理无法执行到。。
评论删除后,数据将无法恢复
引用来自“hrljy”的评论
楼主,我想请问一下,文中提到的“对方修改的代码”是在系统文件加上的吗?引用来自“恋恋美食”的评论
引用来自“tuzhu”的评论
对于LZ封装的pox_system函数,有一个问题:
如果在system函数执行时,某个子进程挂了,此时SIGCHLD信号被忽视掉了。可能会导致对于子进程的后处理无法执行到。。
0.父进程创建了10个子进程,然后一个信号处理函数来监视所有子进程的死活状态。
1.父进程在调用pox_system函数时,将SIGCHLD信号的处理函数设置为默认(忽略)。
2.恰巧在父进程执行pox_system函数的期间,子进程0挂掉了。此时,父进程将捕捉不到子进程挂掉的信息。
我只是觉得存在这个可能性。由于上述问题的时机比较难以把握,所以不好写demo分析,不好意思。
对于system函数的这个问题,我的做法是这样的:
0.调用system函数执行所需的操作;
1.在使用waitpid来处理子进程结束时,函数的options这个参数一定要设置为WNOHANG。这样确保父进程不会因为system函数返回的SIGCHLD信号,导致主进程发生堵塞;
2.对waitpid函数的返回值进行判定,如果是需要处理的子进程,则进行相应处理。否则,丢弃SIGCHLD信号。
引用来自“tuzhu”的评论
对于LZ封装的pox_system函数,有一个问题:
如果在system函数执行时,某个子进程挂了,此时SIGCHLD信号被忽视掉了。可能会导致对于子进程的后处理无法执行到。。
如果在system函数执行时,某个子进程挂了,此时SIGCHLD信号被忽视掉了。可能会导致对于子进程的后处理无法执行到。。