杀死Java进程
我正在研究计算量很大的代码 – 现在 – 崩溃很多,但我还在努力:)当它崩溃时,我无法关闭GUI窗口; 我必须打开一个shell并杀死-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
每个进程。
我想以自动方式做到这一点。 我认为应该很容易管道一些命令来获取ps aux | grep java
的(n-1)结果的id ps aux | grep java
并杀了它,但我不知道从哪里开始。
任何人都可以给我任何提示吗?
更多的管道将为您提供您想要的位置。 我是这样做的:
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进程。
如果要杀死所有名为java
进程,可以使用以下命令:
killall -9 java
此命令将信号发送到由其名称标识的进程。
打开文本编辑器并将此短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
会更合适 – 请参阅此处的解释。
这是另一种方法,基于@Dian先前的答案。
这使用jps来标识java进程。
kill $(jps | grep | awk '{print $1}')
MainClass是运行java程序中的一个类,它包含main方法。