杀死Java进程


25

我正在处理一个计算量很大的代码,目前它崩溃很多,但是我仍在处理它:)当它崩溃时,我无法关闭GUI窗口。我必须打开一个外壳并杀死-9的过程。

这是一个Java进程,很容易找到:

nkint@zefiro:~$ ps aux | grep java
nkint   2705 16.6  1.0 460928 43680 ?        Sl   12:23   0:08 /usr/lib/jvm/java-6-sun-1.6.0.26/bin/java -Djava.library.path=something something
nkint   2809  0.0  0.0   4012   776 pts/0    S+   12:24   0:00 grep --color=auto java
nkint@zefiro:~$ kill -9 2705

现在,这很容易,但却是一项艰巨的机械任务。所以通常我会等待大约7-8个进程崩溃,然后kill -9每个进程都崩溃。

我想自动执行此操作。我认为通过管道传递一些命令来获取(n-1)个结果的id ps aux | grep java并杀死它应该很容易,但是我不知道从哪里开始。

谁能给我任何提示吗?

Answers:


22

多一些管道将使您到达想要的位置。这是我的处理方式:

search_terms='whatever will help find the specific process' 

kill $(ps aux | grep "$search_terms" | grep -v 'grep' | awk '{print $2}')

这是正在发生的事情:

grep -v 'grep' 从结果中排除grep进程。

awk '{print $2}' 仅输出输出的第二列(在这种情况下为PID)

$(...)是命令替换。基本上,内部命令的结果将用作kill

这样做的好处是可以更好地控制被杀死的内容。例如,如果您使用的是共享系统,则可以编辑搜索词,使其仅尝试杀死自己的Java进程。


49

如果要终止所有已命名的进程,java可以使用以下命令:

Killall -9 Java

该命令将信号发送到由其名称标识的进程。


killall java由于某种我无法解决的随机原因而无法为我工作。该-9参数已解决了这一问题。谢谢。
保罗·尼尔森·贝克

5
9是SIGKILL。程序不能忽略它,它基本上说:立即终止自己。
米兰Todorovic

IntelliJ用户可能会发现他们的IDE崩溃了,更不用说Tomcat和许多其他应用了。这是强力方式,不建议在任何依赖服务或生产力应用程序的系统上使用java
tresf

3

打开一个文本编辑器,然后将此简短的bash脚本保存在主目录中,作为“ killjava”

#! /bin/bash

# Kill Java process

# Determine the pid
PID=`ps -C java -o pid=`

kill -9 $PID

然后chmod u+x ~/killjava在终端中执行文件。

然后,您只需~/killjava从终端进行调用,您的Java进程将陷入僵局。您可能希望考虑以这种方式杀死Java进程还有哪些其他资源(例如数据库连接)会受到影响。例如,也许kill -15会更合适-请参见此处的说明。


2

这是一种替代方法,基于@Dean的早期答案。

这使用jps标识Java进程。

kill $(jps | grep <MainClass> | awk '{print $1}')

MainClass是正在运行的Java程序中的一个类,其中包含main方法。

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.