我正在研究一个计算量很大的代码,目前它经常崩溃,但我仍在努力解决它:) 当它崩溃时,我无法关闭 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