Убить процессы Java

Я работаю над вычислительно тяжелым кодом, который - пока - много сбоев, но я все еще работаю над ним :) Когда он падает, я не могу закрыть окно GUI; Я должен открыть оболочку и убить -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) результатов ps aux | grep java и убить его, но я понятия не имею, с чего начать.

Кто-нибудь может дать мне какие-нибудь подсказки?

25
задан 11 December 2012 в 21:27

4 ответа

Еще несколько трубок доставят вас туда, куда вы хотите. Вот как я это сделаю:

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}' печатает только 2-й столбец выходных данных (в данном случае PID)

$(...) является подстановкой команд. В основном результат от внутренней команды будет использоваться в качестве аргумента для kill

. Это дает преимущество в более точном контроле над тем, что убито. Например, если вы работаете в общедоступной системе, вы можете отредактировать условия поиска, чтобы она пыталась уничтожить только ваши собственные процессы Java.

0
ответ дан 11 December 2012 в 21:27

Если вы хотите уничтожить все процессы с именем java, вы можете использовать следующую команду:

killall -9 java

Эта команда отправляет сигналы процессы, идентифицированные по их названию.

0
ответ дан 11 December 2012 в 21:27

Откройте текстовый редактор и сохраните этот короткий скрипт 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 будет более уместным - см. Объяснение здесь .

0
ответ дан 11 December 2012 в 21:27

Вот альтернативный подход, основанный на предыдущем ответе @ Дина.

Используется jps для идентификации процесса Java.

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

MainClass - это класс в вашей работающей Java-программе, который содержит метод main.

0
ответ дан 11 December 2012 в 21:27

Другие вопросы по тегам:

Похожие вопросы: