等待的 pkill

gue*_*tli 2 command-line kill

是否有类似 pkill 的工具可以执行此操作:

  1. 向所有匹配进程发送信号
  2. 等待 N 秒,直到进程终止
  3. 如果所有进程都已终止,很好:退出
  4. 如果某些进程尚未终止,则发送 SIGKILL

对我来说,重要的是该工具等待进程真正终止。

我知道用我最喜欢的脚本语言很容易做到这一点,但在这种情况下,如果我使用一个已经存在的工具会非常好。

这需要在 SuSE-Linux 和 Ubuntu 上运行。

Ste*_*itt 9

没有“标准”命令可以提供您所追求的行为。但是,在 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-daemondpkg软件包的一部分,因此它始终可用于 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-daemonutils目录中找到。


Rab*_*bin 6

您可以使用该timeout命令killall -w

例如:

# timeout 3 killall -vws2 $PROCESS_NAME || killall -vws9 $PROCESS_NAME
Run Code Online (Sandbox Code Playgroud)

timeout将在 3 秒后“超时”并退出并显示错误代码,然后您捕获该代码,||然后运行killall -s9以强制终止。