是否有类似 pkill 的工具可以执行此操作:
- 向所有匹配进程发送信号
- 等待 N 秒,直到进程终止
- 如果所有进程都已终止,很好:退出
- 如果某些进程尚未终止发送 SIGKILL
对我来说,重要的是该工具等待进程真正终止。
我知道用我最喜欢的脚本语言很容易做到这一点,但在这种情况下,如果我使用已经存在的工具会非常好。
这需要在 SuSE-Linux 和 Ubuntu 上运行。
是否有类似 pkill 的工具可以执行此操作:
对我来说,重要的是该工具等待进程真正终止。
我知道用我最喜欢的脚本语言很容易做到这一点,但在这种情况下,如果我使用已经存在的工具会非常好。
这需要在 SuSE-Linux 和 Ubuntu 上运行。
没有提供您所追求的行为的“标准”命令。但是,在 Debian 和衍生产品上,您可以将
start-stop-daemon
'--stop
操作与以下--retry
选项一起使用:将发送
SIGTERM
到所有名为 的进程daemontokill
,等待它们停止最多 15 秒,然后发送SIGKILL
到所有剩余进程(从初始选择开始),然后再等待 15 秒让它们死亡。如果没有要杀死的东西或所有进程都停止,它将以状态 0 退出,如果在第二次超时后某些进程仍然存在,它将以状态 2 退出。有许多选项可以以各种方式匹配流程,有关详细信息,请参阅文档(上面链接)。您还可以提供更详细的时间表,其中包含不同的超时时间。
start-stop-daemon
是dpkg
软件包的一部分,因此它始终在 Debian 系统(和衍生产品)上可用。一些非.deb
发行版也使该软件包可用;例如,openSUSE Leap 42就有它。在其他平台上构建非常简单:你需要
autoconf
,automake
,libtool
,gettext
. 构建完成后,您将start-stop-daemon
在utils
目录中找到。您可以使用该
timeout
命令killall -w
例如:
timeout
将在 3 秒后“超时”,并以错误代码退出,然后你会抓住它||
,然后运行killall -s9
以强制杀死。您可以创建自己的脚本来满足您的情况。按照这个帖子无用的使用 kill -9和 source reallykill
因此,您可以将脚本下载到您的 bin 目录:
我会这样使用:
也许你想先用 INT 改变信号的顺序,所以你会得到 ping 命令摘要的输出。如果 KILL 信号成功,则提供的命令不会等待,但它应该可以工作,因为进程将被系统杀死。