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


25

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

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

Ответы:


22

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

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.


49

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

killall -9 Java

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


killall javaне работал для меня по какой-то случайной причине, которую я не смог решить. -9Параметр позаботилась об этом. Спасибо.
Пол Нельсон Бейкер

5
9 SIGKILL. Программа не может игнорировать это, и в основном говорит: прекратить себя сейчас.
Милан Тодорович

Пользователи IntelliJ могут обнаружить, что их IDE не работает, не говоря уже о Tomcat и многих других приложениях. Это грубый метод, который не рекомендуется использовать в любой системе, в которой используются сервисы или приложения для повышения производительности java.
tresf

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было бы более уместным - см. Объяснение здесь .


2

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.