我通常运行一些 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 进程实际上在做什么。这是完整的命令:。grep
ps
-C
ps
-f
ps -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
命令