gpt4 book ai didi

c - 等待和/或杀死由 fork 产生的进程孙子

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:30 25 4
gpt4 key购买 nike

fork() 进入进程 X 和 Y,之后 Y fork() 再次进入自身并多次处理 Z。

现在进程 Y 是某种“监听器”,我希望 X 成为删除器。 Z 进程执行实际操作。 Z 进程是 X 的孙进程。

通过 FIFO 和一些信号,X 生成了 Z 进程的所有 pids 的列表。现在的问题是我想用 X 删除 Z 进程僵尸(通过 pids 列表)。

我已经用 waitpid() 试过了,但当然这不起作用(它只对直接子级有效)。但是我已经读到过自己为此进行扩展的可能性。但我真的不知道该怎么做。

我想过删除器会保留另一个包含僵尸的列表(退出时发出信号),但这与我保存 pids 时所做的相同,我想以不同的方式来做。

有没有人知道如何做到这一点?

最佳答案

唯一可以从其遥远的第 N 代孙子进程获取退出状态的进程是“init”进程,这是内核实现的特例规则。

一般来说,一个进程只能等待它的直接子进程死掉;它不能等待它的 child 的后代死去。

病态的生意...


如果您负责流程 Y代码,或者可以影响它,也许那个过程应该设置 signal(SIGCHLD, SIG_IGN)这样 Z进程不会创建僵尸。流程X它甚至可以在 fork Y 时自己做这件事通过在 fork() 之后的子进程中忽略 SIGCHILD 来处理在任何 exec*() 之前的 Y过程。这只会在 Y 时被覆盖进程为 SIGCHLD 显式设置不同的处理程序。如果Y代码显式设置 SIGCHLD 处理并且实际上不收集其僵尸(Z 进程),那么您可以在 Y 中报告错误代码。

关于c - 等待和/或杀死由 fork 产生的进程孙子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6228864/

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