我正在使用处理从管道读取并写入文件的分支进程(“ pipe2file”)重定向程序(程序“ exec'ed”)的输出。

如果程序“ exec'ed”被杀死,并且其等待状态被获取,则“ pipe2file”进程需要执行相同的操作。
所以,我正在做的正是这样的:


关闭它使用的管道的末端
通过kill(pipe2file, SIGKILL)发送终止信号
使用waitpid来获取其退出状态,例如waitpid(pipe2file, &status, 1)
if (WIFEXITED(status) || WIFSIGNALED(status))检查状态


尽管如此,在完成上述步骤后,pipe2file进程仍以僵尸结尾。
怎么了?

最佳答案

您这里有比赛条件。呼叫kill可能不会立即杀死您的孩子。需要一点时间。
您没有等待足够长的时间让您的孩子离开。

waitpid(pipe2file, &status, 1)


如果您的孩子还没有退出,将会放弃。选项中的1WNOHANG选项(例如,不要等到它实际退出)。更改为

waitpid(pipe2file, &status, 0)

关于c - 杀死负责将stdout重定向到文件的进程使其成为僵尸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16211908/

10-09 20:36