c - 如何无害地杀死子进程

标签 c linux race-condition

父进程 fork 并获取子 ID。 child 做一些事情。如果它在 1 秒后没有完成, parent 会通过 id 杀死它。但是,如果 child 在 1 秒内完成并且系统执行另一个与我的 child 具有相同 ID 的进程怎么办。在这种情况下, parent 会杀死无辜的进程。我怎样才能避免这种情况?

最佳答案

PID 保留到 wait (或类似的函数,如 waitpid )告诉父进程该进程已退出。

如果进程已退出但 wait 未告知您的 parent 然而,这个过程被称为“僵尸”。 Nothing happens when you kill a zombie process .

所以,你的 parent 只需要小心不要在 wait 之后发送任何信号。告诉它子进程已完成。这应该很容易。不涉及竞争条件。

注意:这也意味着您需要调用wait (或相关函数,如 waitpid )在生成子进程后。或者,如果您的进程退出,那么它创建的僵尸进程就会消失(因为它们被 PID 1 “采用”,它调用 wait )。

关于c - 如何无害地杀死子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59617510/

相关文章:

linux - 使用awk查找字母并打印结果

c - Linux (gcc) 上的段错误

计算我创建的自定义结构的校验和

c - 使用 x86 asm 制作 MMAP 宏

c - 来自更大数组的新索引数组

java - 使用太多目录提高性能

javascript - 如何处理javascript中的竞争条件?

go - 为什么不读/写其内容的结构方法仍然会导致竞争情况?

javascript - IE8 -- JS 的异步验证?

c - 指针 malloc 失败