当前位置: 首页>>技术教程>>正文


杀死 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 并杀死它,但我不知道从哪里开始。

谁能给我任何提示吗?

最佳思路

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

\\n

killall -9 java

\\n

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

次佳思路

再多几根管道就能到达您想去的地方。我是这样做的:

search_terms='whatever will help find the specific process' 

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

这里’s what’s发生:

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

awk '{print $2}' 仅打印输出的第二列(在本例中为 PID)

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

这样做的好处是可以更好地控制被杀死的东西。例如,如果您在共享系统上,您可以编辑搜索词,使其仅尝试终止您自己的 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 会更合适 – 请参阅解释 here

第四种思路

这是基于 @Dean 之前的答案的另一种方法。\n

\n这使用 jps 来识别 java 进程。

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13823.html,未经允许,请勿转载。