Убить процесс по имени и пользователю

Я пытаюсь выяснить, есть ли способ убить все процессы по имени и пользователю. Например. Я хочу убить все экземпляры Java, запущенные пользователем myuser.

На данный момент я делаю:

$ pgrep -u myuser java
2185
3281
3413
3504
22534
26174
27554

который дает список pid java, запущенного mysuer. Затем я убиваю каждого pid по отдельности. Есть лучший способ сделать это?

Заранее спасибо!


person evgeni    schedule 27.04.2011    source источник


Ответы (5)


Используйте killall(1):

killall -u myuser java

Обратите внимание, что вам может понадобиться сделать это через sudo, и вам может понадобиться -9 для уничтожения процессов, которые поглощают SIGTERM:

sudo killall -9 -u myuser java
person Oliver Charlesworth    schedule 27.04.2011
comment
хорошо, извините. Я пробовал это на java раньше, но сверху все еще показывался java pid и ресурсы, которые он использовал. Чтобы повторить попытку, я только что запустил несколько экземпляров top и попытался использовать эту команду, чтобы убить их всех для моего пользователя, но новое верхнее окно по-прежнему показывает 5 запущенных основных процессов. - person evgeni; 28.04.2011
comment
спасибо, это работает. Пробовал все виды команд с kill, killall и pkill с -9 и SIGTERM, но, похоже, пропустил эту. - person evgeni; 28.04.2011
comment
@Oli: из любопытства, что именно добавляет -9 к команде? Я прочитал его для альтернативных сигналов, но знаете ли вы, что он на самом деле делает? - person evgeni; 28.04.2011
comment
@evgeni: 9 — это число для SIGKILL. Приложение не может предоставить собственный обработчик для SIGKILL (или игнорировать его), поэтому приложение всегда будет немедленно завершаться (если только это не процесс-зомби). Напротив, kill и killall отправляют SIGTERM по умолчанию, что может быть перехвачено приложением. - person Oliver Charlesworth; 28.04.2011

Вы рядом:

$> pgrep -u myuser java | xargs kill
person Chris Eberle    schedule 27.04.2011

следующая команда может выполнить задание

$ pkill -u user process_name

обратите внимание, что имя_процесса также может быть регулярным выражением.

person MANJUNATH MULAGE    schedule 04.10.2013

Я знаю, что это старо, но вот скрипт bash, позволяющий легко это сделать...:

`pgrep -u root $app`
set -- $appPID
kill -9 $appPID

Вот сообщение в блоге, которое я написал на эту тему для уничтожения группы процессов: https://soroo.sh/linux/kill-processess-by-name

person Soroush Khosravi    schedule 16.12.2013

Вы можете сделать это, используя

killall -u user

Но иногда это приводит к прекращению работы процесса.

Лучший способ может быть таким: -

psu | grep user | awk  '{print $2}' | xargs   kill -9

ПРИМЕЧАНИЕ. Это также убьет ваш текущий сеанс на сервере, если вы убиваете процессы, запущенные пользователем, под которым вы вошли.

Спасибо.

person Phoenix    schedule 03.05.2018