使用 sigterm 终止进程并在超时后升级为 sigkill

kill process using sigterm and escalate to sigkill after timeout

有没有办法对超时的进程进行签名?如果进程未在 30 分钟内正常终止,则该进程应获得 sigkill。理想情况下,这种优雅的关机应该在后台执行。

timeout command,它允许您限制进程的执行时间,如果它没有及时响应初始信号(默认为 SIGTERM),则升级为 SIGKILL。这不是您所要求的,但可能就足够了。

要执行您实际描述的操作(发送信号,短暂等待,然后发送杀戮),您可能需要自己做一些簿记,如 this question 详情。

一种选择是使用 Upstart (or I imagine other service managers), which provides a kill timeout n command 来满足您的需求。


顺便说一句,许多系统会将 30 分钟视为很多 等待 SIGTERM 的时间太长。例如,Linux 做了一些类似于您在关闭时所描述的事情,但是在 SIGKILLing 之前只给进程几秒钟的时间来清理和退出。对于其他用例,您当然 可以 有一个 long-lived 终止,就像您描述的那样(例如使用 Upstart),但是 YMMV。