是否有类似 pkill 的工具可以执行此操作:
对我来说,重要的是该工具等待进程真正终止。
我知道用我最喜欢的脚本语言很容易做到这一点,但在这种情况下,如果我使用一个已经存在的工具会非常好。
这需要在 SuSE-Linux 和 Ubuntu 上运行。
没有“标准”命令可以提供您所追求的行为。但是,在 Debian 和衍生产品上,您可以使用带有选项start-stop-daemon
的--stop
操作--retry
:
start-stop-daemon --stop --oknodo --retry 15 -n daemontokill
Run Code Online (Sandbox Code Playgroud)
将发送SIGTERM
到所有名为 的进程daemontokill
,最多等待 15 秒让它们停止,然后发送SIGKILL
到所有剩余进程(从初始选择开始),再等待 15 秒让它们死亡。如果没有任何东西可以杀死或所有进程都停止,它将以状态 0 退出,如果在第二次超时后某些进程仍然存在,则退出状态为 2。
有许多选项可以以各种方式匹配进程,有关详细信息,请参阅文档(上面链接)。您还可以提供具有不同超时的更详细的时间表。
start-stop-daemon
是dpkg
软件包的一部分,因此它始终可用于 Debian 系统(及其衍生产品)。一些非.deb
发行版也使包可用;例如,openSUSE Leap 42就有。在其他平台上构建非常简单:
git clone https://salsa.debian.org/dpkg-team/dpkg.git
cd dpkg
autoreconf -fi && ./configure && make
Run Code Online (Sandbox Code Playgroud)
你需要autoconf
, automake
, libtool
, gettext
。构建完成后,您将start-stop-daemon
在utils
目录中找到。
您可以使用该timeout
命令killall -w
例如:
# timeout 3 killall -vws2 $PROCESS_NAME || killall -vws9 $PROCESS_NAME
Run Code Online (Sandbox Code Playgroud)
timeout
将在 3 秒后“超时”并退出并显示错误代码,然后您捕获该代码,||
然后运行killall -s9
以强制终止。