只杀死一个Java进程

只杀死一个Java进程

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

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

答案1

要终止与多个进程关联的进程,您需要使用与该进程关联的进程 ID 来终止该进程。

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

ps -A |grep java

该命令的输出将给出系统上运行的 java 进程的列表。记下要终止并运行的进程的进程 ID (PID)

kill -9 PID

答案2

IMO最好的解决方案是:

pkill -9 -f <nameOfYourJavaAplication>

答案3

您可以使用s标志来选择以名称“java”列出的所有命令,而不是使用ps和。您可能还想使用's标志来打印每个列出的进程的完整命令名称。这样,您就可以看到每个 java 进程实际上在做什么。这是完整的命令:。grepps-Cps-fps -fC java

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

一旦获得了要终止的命令的 PID,请kill-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

psgrep -a java返回

9014 java IDE
11775 java TestProgram

如果你想杀人java TestProgram,你就应该跑kill -9 11775

答案4

你可以简单地使用

jps -l

命令获取java进程的所有进程ID,然后发出

进程ID

命令

相关内容