bash - 使用 sigterm 杀死进程并在超时后升级到 sigkill

标签 bash sigkill sigterm

有没有办法对超时的进程进行 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/

相关文章:

bash - 在 Bash 中用数字对字符串进行排序

bash - 如何在 jupyterlab 中使用当前用户和用户的 .bashrc 文件登录到 bash?

audio - iOS 11 WKWebView 应用程序在播放音频时从 Watchdog 获取 SIGKILL

linux - 防止 systemd 创建的 tmux session 在 Ctrl+C 上自动终止

无法使用 sigaction 函数捕获 SIGTERM

bash - 如何递归删除所有文件的尾随空格?

regex - 为什么 sed 不像 awk 那样追加换行符?

node.js - NodeJS 脚本在 Forever 上运行时被 SIGKILL 杀死

java - Hadoop 作业未在大数据集中运行并抛出子错误

python - 多处理子进程随机接收 SIGTERM