3

在 Windows (7) 中,在 VC++ 中,我们可以设置“进程关闭参数”(在 XP 中,父进程将在子进程之前自动关闭)以确保父进程在子进程之前被杀死,如下所示:

GetProcessShutdownParameters(&shutdownlevel, &shutdownflags);
SetProcessShutdownParameters(shutdownlevel+1, SHUTDOWN_NORETRY);

如何在 Linux (gcc) 上的 C++ 中执行此操作?我在许多论坛上发现了很多关于如何确保子进程被杀死的讨论,以防父进程死亡(例如在 Linux 上使用 prctl),但我没有发现如何保证父进程被操作系统杀死在子进程之前,就像上面的 Windows 一样。也许它在 Linux 中是自动的?

4

1 回答 1

0

Unix 世界中的系统关闭工作方式略有不同。

当系统被关闭时,首先调用关闭脚本,它处理任何复杂或耗时的任务,当脚本运行时,所有剩余的进程首先被发送一个SIGTERM信号(这会杀死任何没有运行的进程)有一个明确的处理程序),几秒钟后,一个SIGKILL信号(终止进程并且无法处理)。

最后一部分发生的顺序是未定义的。

一般来说,应该编写程序,以便它们可以通过简单地发送来关闭SIGTERM

我猜您希望父母在孩子之前停止,因为父母只会重新启动孩子。避免这种情况的正确方法是收集孩子的退出状态(无论如何你都要负责),并避免在退出状态表明进程因被发送而结束时重新启动SIGTERM

(你仍然想在 上重新启动SIGKILL,因为当系统内存不足时,最大的进程会发生这种情况)

于 2013-07-16T08:32:14.503 回答