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

17

Я работаю над вычислительно-тяжелым кодом, который - пока что - сбой много, но я все еще работаю над ним :) Когда он падает, я не могу закрыть окно графического интерфейса; Мне нужно открыть оболочку и убить процесс -9.

Это процесс Java, и его легко найти:

[email protected]:~$ 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
[email protected]:~$ kill -9 2705

Теперь это легко, но довольно механическая задача. Поэтому обычно я жду, когда произойдет сбой около 7-8 процессов, а затем kill -9 каждого из них.

Я хочу сделать это автоматически. Я думаю, что было бы легко передать некоторые команды, чтобы получить идентификатор (n-1) результатов ps aux | grep java и убить его, но я не знаю, с чего начать.

Может ли кто-нибудь дать мне какие-нибудь намеки?

    
задан nkint 11.12.2012 в 12:30
источник

4 ответа

17

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

search_terms='whatever will help find the specific process' 

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

Вот что происходит:

grep -v 'grep' исключает процесс grep из результатов.

awk '{print }' печатает только второй столбец вывода (в данном случае PID)

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

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

    
ответ дан Dean 11.12.2012 в 19:49
источник
34

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

  

killall -9 java

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

    
ответ дан Milan Todorovic 11.12.2012 в 12:59
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 будет более уместным - см. Объяснение здесь .

    
ответ дан Clive van Hilten 11.12.2012 в 12:46
1

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

Для определения процесса java используется jps .

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

MainClass - это класс в вашей запущенной java-программе, которая содержит основной метод.

    
ответ дан Pawan 04.10.2016 в 20:27