使用 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。
有没有办法对超时的进程进行签名?如果进程未在 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。