【发布时间】:2016-04-18 23:02:09
【问题描述】:
我有很多分叉的进程。子进程做很多事情和另一个系统调用。
当任何子进程从系统调用中收到错误时,它会将错误描述打印到 stderr 并将 SIGUSR1 发送给组长(主要父进程)。
SIGUSR1 告诉父进程杀死所有子进程,释放资源并退出程序执行(以避免僵尸进程)。
我需要一次杀死所有的孩子。原子地。因此,当任何子进程发生任何错误时,所有子进程都会立即停止工作。
当前父进程使用 SIGUSR2 杀死所有子进程 - 它将此信号发送给所有进程组成员 (killpg) - 他们都安装了信号处理程序来杀死它们(退出) - 虽然组长不会被杀死(它仍然需要释放资源)。
问题是,在所有子进程被杀死之前,它们仍然可以执行大约 1-2 行代码,这不是我想要的。我需要立即阻止他们。
我怎样才能做到这一点?
【问题讨论】:
-
你怎么知道他们可以在被杀之前执行 1-2 行代码?
-
因为我看到了。他们做一些系统调用并输出一些东西,其中一些在被杀死之前做一些输出。我只知道,相信我:)
-
但是你怎么知道他们在收到信号和死亡之间执行了 1-2 行,而不是在信号发送之前没有执行 1-2 行?
-
因为发送信号时,会立即杀死子进程
-
如果子进程被立即杀死,那么为什么问题说子进程没有被立即杀死?
标签: c parallel-processing kill-process