SIGKILL信号处理程序

29

我有一个要求,需要在接收到任何终止命令,如SIGTERM和SIGKILL时写入日志文件。

我可以注册SIGTERM,但是如何处理SIGKILL信号?


建议阅读:尝试处理SIGKILL - Ben Voigt
1
可能是重复的问题:如何优雅地处理SIGKILL信号 - Ben Voigt
@Ben Voigt:我不愿将此标记为“如何优雅地处理SIGKILL信号”的重复问题,因为该问题包含错误信息,暗示Control-C发送KILL信号,而实际上它发送INTR信号。 - Omnifarious
@Omnifarious:那个问题的答案没有犯这样的错误,而且对这个问题的回答将会与现有的答案完全重复。这对我来说足够作为重复投票了。 - Ben Voigt
这就是为什么我不鼓励人们使用 kill -9,除非他们绝对必须这样做。进程应该有机会清理事情,除非你认为它们是恶意的,而不是仅仅是失控或不需要的。 - Omnifarious
1个回答

38

你不能做到,至少不能做到在进程被杀死时。

你可以安排父进程监视子进程的死亡,并根据情况采取行动。任何像daemontools这样的良好进程监控系统都内置了这样的功能。


2
使用父进程是最简单的,但不是必需的。任何持有管道或FIFO的另一端的进程将在其对等方被终止时收到通知。 - Ben Voigt
1
@Ben:管道可以通过进程的死亡以外的其他方式关闭,因此不是非常可靠。但如果您无法控制父进程,则可能是您唯一的选择。(daemontools有一个名为“fghack”的程序,可以在这个前提下工作。) - C. K. Young

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接