是否必须将 SIGKILL(和 SIGTERM)显式发送到指定进程?

Tim*_*Tim 1 linux signals sigkill sigterm

阅读吉尔斯的回答

SIGHUP 在严厉程度方面与 SIGTERM 大致相同,但它具有特定的作用,因为当用户与终端断开连接时,它会自动发送到终端中运行的应用程序(从词源上讲,因为用户是通过电话线和调制解调器连接的)挂了)。SIGHUP 通常是非自愿的,与必须显式发送的 SIGTERM不同,因此应用程序应尝试在 SIGHUP 上保存其状态。

“必须显式发送的 SIGTERM”中的“显式”是否意味着 SIGTERM 必须最初由进程(而不是内核)通过进程调用发送kill()

我想知道 SIGKILL 是否必须显式发送到指定的进程?内核可以隐式向进程发送 SIGKILL 和 SIGTERM 中的任何一个吗?

当操作系统关闭时,内核是否会向正在运行的进程发送一些信号来终止它们?它是什么信号?内核是否隐式发送它?

谢谢。

Ste*_*itt 5

据我所知,Linux 内核不会SIGTERM自行发送给用户进程。(SIGTERM在内核线程内部使用:\xe2\x80\x99 是内核如何要求内核线程停止的。)

\n\n

在许多情况下,内核确实会SIGKILL自行向用户进程发送消息。例如,OOM 杀手使用 ; 杀死其目标SIGKILL。某些内核 oops会导致SIGKILL; 各种内存故障都可能导致SIGKILLs。

\n\n

操作系统SIGTERM关闭时,使用和关闭进程SIGKILL,但这些信号不来自内核(或者不是直接使用kill()pid 为 0 的 \xe2\x80\x94 调用,否则将导致负 pid在内核中向多个进程发送信号)。它们来自终止其服务的服务管理器,以及作为系统管理机制一部分的各种最后一搏的应用程序模式程序:例如 van killprocsSmoorenburgrc脚本killprocsOpenRC 脚本systemd-shutdown程序

\n\n

内核关闭或重新启动时,它不关心进程,也不杀死它们(reboot()详细信息请参阅;忽略LINUX_REBOOT_CMD_RESTART2系统调用的变体,您可以xe2x80) x99t 使用命令参数来处理进程)。

\n