杀死 Java 进程

nki*_*int 34 process pipe kill

我正在处理一个计算量很大的代码 - 目前 - 崩溃了很多,但我仍在努力:) 当它崩溃时,我无法关闭 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
Run Code Online (Sandbox Code Playgroud)

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

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

谁能给我任何提示?

Mil*_*vic 65

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

killall -9 java

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

  • 9 是 SIGKILL。程序不能忽略它,它基本上是说:现在终止自己。 (6认同)

Dea*_*ean 25

再多几根管子就能把你带到你想去的地方。这是我的做法:

search_terms='whatever will help find the specific process' 

kill $(ps aux | grep "$search_terms" | grep -v 'grep' | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)

这是发生了什么:

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

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

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

这样做的好处是可以更好地控制被杀死的东西。例如,如果您在共享系统上,您可以编辑搜索词,以便它只尝试终止您自己的 Java 进程。