有没有办法对超时的进程进行 sigterm?如果该进程没有在 30 分钟内正常终止,则该进程应该得到 sigkill。理想情况下,这种正常关闭应该在后台执行。
最佳答案
这是 timeout
command ,它允许您限制进程的执行时间,如果它没有及时响应初始信号(默认为 SIGTERM),则升级为 SIGKILL。这不是您所要求的,但这可能就足够了。
要执行您实际描述的操作(发送信号,短暂等待,然后发送终止),您可能需要自己做一些记账,如 this question细节。
一种选择是使用 Upstart (或者我想象其他服务管理器),它提供了一个 kill timeout n
command那做你想要的。
顺便说一句,许多系统会将 30 分钟视为等待 SIGTERM 的时间太长。例如,Linux 会执行类似于您在关闭时所描述的操作,但是在 SIGKILL 之前只给进程几秒钟的时间来清理和退出它们。对于其他用例,您当然可以像您描述的那样(例如使用 Upstart)长期终止,但是 YMMV。
关于bash - 使用 sigterm 杀死进程并在超时后升级到 sigkill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245948/