只杀死一个 Java 进程

Pet*_*sik 19 process kill java

我通常运行很少的 Java 应用程序,一个用于在本地运行的服务器,另一个用于一些 IDE,如 NetBeans。有时,经过大量重新部署后,我的服务器会卡在 OutOfMemoryException 上,因此我需要终止 Java 进程才能重新启动。

所以我这样做了,pkill -9 java但这也会杀死我不想要的正在运行的 IDE。那么我如何只杀死链接到正在运行的服务器的应用程序而不是其他的应用程序?我假设它们都在同一个进程下运行,但必须有一些方法来区分它们。

小智 30

要杀死与多个进程关联的进程,您需要使用与该进程关联的进程 ID 来杀死它。

获取该java进程运行的进程ID

ps -A |grep java
Run Code Online (Sandbox Code Playgroud)

此命令的输出将提供在您的系统上运行的 Java 进程列表。记下要杀死和运行的进程的进程 ID (PID)

kill -9 PID
Run Code Online (Sandbox Code Playgroud)


小智 12

IMO 的最佳解决方案是:

pkill -9 -f <nameOfYourJavaAplication>
Run Code Online (Sandbox Code Playgroud)


小智 9

除了使用psand 之外grep,您还可以使用ps's-C标志来选择所有以 'java' 名称列出的命令。您可能还想使用ps's-f标志来打印每个列出的进程的完整命令名称。这样,您就可以看到每个 java 进程实际在做什么。这是完整的命令:ps -fC java.

您还可以pgrep用于列出所有 Java 进程。pgrep -a java将返回每个 java 进程的 PID 和完整的命令行。

一旦你有你想杀人,使用该命令的PIDkill-9(SIGKILL)标志,并要杀掉java进程的PID。Java 在收到“SIGTERM”信号时并不总是停止(允许进程处理“SIGTERM”),因此通常需要向它发送“SIGKILL”信号,这使得 init 终止程序而不先警告它。

例如,如果ps -fC java返回

UID        PID  PPID  C STIME TTY          TIME CMD
jeff      9014  8890  0 08:51 pts/0    00:00:00 java IDE
jeff     11775  8890  6 08:59 pts/0    00:00:00 java TestProgram
Run Code Online (Sandbox Code Playgroud)

psgrep -a java返回

9014 java IDE
11775 java TestProgram
Run Code Online (Sandbox Code Playgroud)

而你想杀人java TestProgram,你应该跑kill -9 11775