我正在使用分叉进程(“pipe2file”)重定向程序(程序“exec'ed”)的输出,该进程处理来自管道的读取并写入文件。
如果程序“exec'ed”被杀死,并且其等待状态被收获,则需要对“pipe2file”进程执行相同操作。
所以,我正在做的就是:
kill(pipe2file, SIGKILL)
waitpid(pipe2file, &status, 1)
if (WIFEXITED(status) || WIFSIGNALED(status))
仍然,经过上述步骤后,pipe2file进程结束了一个僵尸 有什么问题?
答案 0 :(得分:0)
你这里有竞争条件。致电kill
可能不会立即杀死您的孩子。这需要一点时间。
你没有等待足够长的孩子退出。
waitpid(pipe2file, &status, 1)
如果您的孩子尚未离开,将会放弃。选项中的1
是WNOHANG
选项(例如,不要等到它实际退出)。将其更改为
waitpid(pipe2file, &status, 0)