检测服务器是否已加载

Cha*_*ani 3 linux process search

我必须在 Rhel 6 机器上开始一些性能测试,但在开始测试之前,我必须确保没有其他 Java 进程在运行。

这样做的手动方法是使用 "ps -ef | grep java"

但是,由于这个测试将是自动化的,我需要一种方法来以编程方式检测它并杀死所有这些。

有没有办法做到这一点?

Mik*_*her 6

使用 pkill 应该很简单:

pkill java
Run Code Online (Sandbox Code Playgroud)


Ale*_*ios 5

怎么样...?

pkill java
Run Code Online (Sandbox Code Playgroud)

pkill(1)(也在killall(1)Linux 上)的工作方式类似于kill(1),但将信号发送到具有指定名称的所有进程,而不是 PID。还有其他匹配进程的方法 - 检查手册页!

事实上,特别是因为这是我们正在谈论的 Java,我会执行以下操作来正确地自动化操作:

pgrep java >/dev/null && (pkill java; sleep 5)
pgrep java >/dev/null && (pkill -9 java; sleep 5)
if pgrep java >/dev/null; then
    echo "Whoops, java processes still running. Bailing out."
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

这将检查是否有任何 java 进程正在运行,发送SIGTERM信号并等待 5 秒。如果仍有进程在运行,它会发送SIGKILL信号并再等待 5 秒。如果仍有进程在运行,它会停止执行返回退出代码 1 的脚本。

更新:将答案更改为使用pgrep(1)andpkill(1)而不是pidof(1)and killall(1)

  • 买者自负!Linux 上的“killall”很特别。许多其他 Unices 上的 `killall` 向**所有**进程发送信号,而不是所有匹配特定模式的进程。 (2认同)
  • 我们在这里谈论的是 CentOS。但是无论如何`pkill` 也应该完成这项工作 - 并且在任何支持该命令的 Unix 上都是安全的(甚至 OpenBSD 也是如此)。 (2认同)