Как отфильтровать и убить некоторые процессы Java с помощью терминала?

У меня есть команда ps aux | grep -v 'grep' | grep "java" | awk '{print $2}', которая может фильтровать все процессы Java, но проблема в том, что я хочу выбрать только те процессы, чье имя содержит core или nimbus. Существуют и другие процессы Java, такие как eclipse и mail server, которые работают одновременно, и я не хочу, чтобы они там были.

Я проверил это из Процессы Kill Java .

Я новичок в написании сценариев, поэтому прошу прощения, если вопрос глупый. Спасибо!

2
задан 13 April 2017 в 15:23

3 ответа

pkill -f 'java.*(core|nimbus)'

У меня нет установки Java как Ваша, но я действительно выполняю загрузку приложений Django на моем сервере. Аналогичная ситуация в этом они все похожи на процессы UWSGI. Вот блок ps aux | grep uwsgi:

oli       7201  0.0  1.0  70324 20936 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/asvsforms/uwsgi.ini
oli       7202  0.0  1.0  70336 20956 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/bnc/uwsgi.ini
oli       7203  0.0  1.0  70456 21016 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini
oli       7204  0.0  1.0  70272 21068 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/emwill/uwsgi.ini
oli       7205  0.0  1.3  88336 28124 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/qi/uwsgi.ini
oli       7206  0.0  1.0  70256 20996 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/sbaccuracy/uwsgi.ini

Вы можете awk это вниз (Вам не нужно grep и awk) но jave взгляд на pgrep!

$ pgrep -af 'uwsgi.*cleanup'
7203 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini
7217 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini

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

Так или иначе, для уничтожения этого мы просто переключаемся на pkill который является практически той же командой. Это не имеет тех же выходных функций, но это не то, для чего это разработано. И это приводит нас обратно к верхней части ответа.


Если Вы собираетесь настоять на фильтрации ps, не используйте ps|grep|grep|awk|egrep|awk|xargs kill или независимо от того, что было теперь предложено. Это просто выглядит глупым. Сингл awk может сделать всю фильтрацию.

ps aux | awk '/java.*(core|nimbus)/ {print $2}'

Кроме того, можно отправить список для уничтожения от непосредственно в awk:

ps aux | awk '/java.*(core|nimbus)/ {print $2 | kill}'

Я все еще выбрал бы pgrep и pkill все же.

7
ответ дан 14 April 2017 в 01:23
  • 1
    @serg gnome-terminal имеет " держите window" опция. Пойдите для Редактирования-> Предпочтения Профиля-> Заголовок и Команда-> Когда команда выходит из-> набор к " Держите терминал open". – wjandrea 22 December 2016 в 18:09

Почти там. Чтобы выбрать процессы, вы можете сделать это:

ps aux | grep -v 'grep' | grep "java" |egrep -E "core|nimbus"

И когда это даст нужные вам процессы, вы можете приступить к их уничтожению за один раз:

ps aux | grep -v 'grep' | grep "java" | egrep -E "core|nimbus" | awk '{print $2}' |xargs -n 1 kill

0
ответ дан 13 April 2017 в 15:23

Почти там! Попробуйте это: ps aux | grep -v 'grep' | grep "java" | awk '/core/ || /nimbus/ {print $2;}'

можно затем уничтожить процессы, делающие что-то как отправленный @Maarten, ниже, или это:

kill -9 `ps aux | grep -v 'grep' | grep "java" | awk '/core/ || /nimbus/ {print $2;}'`

-1
ответ дан 14 April 2017 в 01:23
  • 1
    Выбор должен быть сделан в BIOS. (К доступу BIOS нажимают F2 во время начальной загрузки), – Andrey 3 April 2018 в 19:21

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

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