仅当进程正在运行时如何杀死?

myW*_*SON 19 command-line bash kill

目前我在我的 sh 脚本文件中使用这样的行:

kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'` 
Run Code Online (Sandbox Code Playgroud)

但我想知道只有在进程(myServer这里)正在运行时如何调用它?

bou*_*555 26

我通常只使用 pgrep 和 pkill

if pgrep myServer; then pkill myServer; fi
Run Code Online (Sandbox Code Playgroud)

  • 如果没有要杀死的进程,它不会退出 0,因此它可能会破坏脚本。 (14认同)
  • 追加`|| 真`然后。 (9认同)
  • 为什么不是 `pkill myServer` 或 `killall -q myServer`?尝试杀死不存在的进程没有任何缺点。 (8认同)

enz*_*tib 9

您可以使用pkill或 来按名称杀死进程killall,请检查他们的手册页。


cod*_*leb 8

有点不同的方法是这样的:

killall PROCESS || echo "Process was not running."
Run Code Online (Sandbox Code Playgroud)

如果进程不存在,这将避免1killall命令返回的错误代码。该echo部分仅在killall返回1时才会生效,而其本身将返回0(成功)。

  • 使用 `killall -q` 更好 (7认同)
  • 警告,并非所有 UNIX 版本都支持 `killall -q`,macOS Catalina 仍然不支持它。 (3认同)

小智 -1

尝试使用:

sudo kill `pidof process_name`
Run Code Online (Sandbox Code Playgroud)

其中 process_name 是您要终止的进程的名称。这样做的好处是 pidof 会列出与给定名称匹配的所有进程的 pid。由于 Kill 接受多个 pid,因此它会一次性杀死所有这些 pid。

让我知道这是否有帮助。