gpt4 book ai didi

c - 杀死负责将 stdout 重定向到文件的进程会使其成为僵尸进程

转载 作者:行者123 更新时间:2023-11-30 17:52:25 31 4
gpt4 key购买 nike

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

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

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

尽管如此,经过上述步骤后,pipe2file 进程最终还是变成了僵尸进程。
怎么了?

最佳答案

这里存在竞争条件。调用 kill 可能不会立即杀死您的 child 。这需要一点时间。您等待 child 退出的时间不够长。

waitpid(pipe2file, &status, 1)

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

waitpid(pipe2file, &status, 0)

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com