只杀死一个Java进程


17

我通常只运行少数Java应用程序,一个用于本地运行的服务器,另一个用于NetBeans等IDE。而且不时地,在大量重新部署之后,我的服务器陷入了OutOfMemoryException异常,因此我需要终止Java进程才能重新启动。

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


2
查看您的进程表(通过topps),然后选择正确的进程表并通过PID杀死它(kill -9 PID_number)。
2013年

哦,是的,我现在可以看到。所以我只需要正确地终止进程PID。非常感谢
Petr Mensik 2013年

我需要使它自动化。如何获取特定程序的PID?
Nikhil VJ

Answers:


23

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

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

ps -A |grep java

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

kill -9 PID

如果您想用一个命令杀死所有Java进程ps ax | grep java | grep -v 'grep' | cut -d '?' -f1 | xargs kill -9
Andrii Karaivanskyi

11

IMO最好的解决方案是:

pkill -9 -f <nameOfYourJavaAplication>

完善。我曾经 ps -fC java发现nameOfYourJavaAplication(in -Dprogram.name
cactuschibre

8

除了使用ps和之外grep,您可以使用ps' -C标志来选择所有名称为'java'的命令。您可能还需要使用ps-f标志来打印列出的每个进程的完整命令名称。这样,您可以看到每个Java进程实际上在做什么。这是完整的命令: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




0

这是一个可以使过程自动化的脚本。

<PROCESS_NAME>正在执行的Java 替换该部分。

#!/bin/sh
process=`ps -ef | grep -v awk | awk -e '/java.*<PROCESS_NAME>/ { print $2 }'`
kill ${process}

注意:我没有把-9。除非您捕获信号并且SIGTERM(默认)失败,否则不需要我。我还建议您使用信号名称,以便于阅读:

kill -TERM ${process}

警告

在执行之前,请kill ...确保已$process按预期设置变量。在ps -efUnix系统之间可能有所不同,所以awk可能需要打印不同的参数。

注意

<PROCESS_NAME>可以改变成一个变量。请记住,如果您每次必须在命令行上键入它,则可能偶尔会出错。我发现具有正确名称的脚本的多个副本更加容易。

同样重要的是:请注意awk脚本的单引号。这意味着您需要关闭并重新打开字符串,并使用介于两者之间的变量。这样的事情应该起作用(未经测试):

process=`ps -ef | grep -v awk | awk -e '/java.*'"${PROCESS_NAME}"'/ { print $2 }'`
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.