Вбийте процеси Java


26

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

Хтось може дати мені підказки?

Відповіді:


23

Ще кілька труб приведуть вас там, де ви хочете бути. Ось як я це зробив:

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.


50

Якщо ви хочете вбити всі названі процеси, javaви можете скористатися наступною командою:

killall -9 ява

Ця команда передає сигнали процесам, визначеним їх іменем.


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

5
9 - SIGKILL. Програма не може її ігнорувати, і в основному говорить: припиніть себе зараз.
Мілан Тодорович

Користувачі IntelliJ можуть виявити, що їх IDE зазнав аварії, не кажучи вже про Tomcat та багато інших додатків. Це брутальний спосіб і не рекомендується в будь-якій системі, на якій покладаються служби чи продуктивність java.
tresf

3

Відкрийте текстовий редактор і збережіть цей короткий скрипт у вашому домашньому каталозі як "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, який містить основний метод.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.