终止 Java 进程

终止 Java 进程

我正在研究一个计算量很大的代码,目前它经常崩溃,但我仍在努力解决它:) 当它崩溃时,我无法关闭 GUI 窗口;我必须打开一个 shell 并 kill -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) 个结果的 idps aux | grep java并终止它,但我不知道从哪里开始。

有人可以给我一些提示吗?

答案1

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

killall -9 java

该命令向通过名称识别的进程发送信号。

答案2

再多几个管道就能让你到达你想要的地方。下面是我的做法:

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 进程。

答案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更合适 - 请参阅解释这里

答案4

我创建这个是因为我的 Modded minecraft 服务器有时会崩溃,并且 Java 卡住并且无法关闭,我受够了,并编写了一个 sh 脚本,它将检测 Java 是否正在运行并尝试杀死它们,如果有人想要的话,这里是代码

#!/bin/sh
echo "-----------------------------------"
echo "Checking to see if \e[96mJava\e[0m is \e[32mrunning!\e[0m" 
echo "-----------------------------------"
sleep 3
if pgrep -x "java" > /dev/null
then
    echo "-----------------------------------"
    echo "\e[96mJava\e[0m is \e[32mrunning:\e[0m Attempting To Kill"
    echo "-----------------------------------"
    sleep 2
    killall SGKILL java
else
    echo "------------------------------------"
    echo "\e[96mJava\e[0m Detection \e[91mFailed:\e[0m Ending Script"
    echo "------------------------------------"
    sleep 1
    exit
fi
sleep 1
if pgrep -x "java" > /dev/null
then
    echo "-----------------------------------------"
    echo "Could not kill \e[96mJava\e[0m, Are you a \e[31mSudo User?\e[0m"
    echo "-----------------------------------------"
    sleep 2
else
    echo "------------------------------"
    echo "\e[96mJava\e[0m was killed \e[32mSuccsessfully!\e[0m"
    echo "------------------------------"
    exit
fi


#Created By Nocturnal_Toker 

相关内容