Сценарий оболочки для -9 убить на основе имени

28

Есть ли способ (возможно, скрипт), как автоматизировать этот процесс:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

К сожалению, pkillслишком слабый, так как я должен идти с -9опцией kill.

MREQ
источник
2
Вы также можете использовать -9с pkill...
Стоп Harming Monica
6
На мой взгляд, это более элегантно и правильно, -KILLчем использовать -9. Какое число соответствует тому, какой сигнал зависит от реализации. SIGKILLслучается 9на Linux i386 и Linux amd64, но не обязательно везде. ( Более подробная информация здесь. )
Элия ​​Каган
5
@EliahKagan: хотя я -KILLтоже люблю его использовать (поскольку он делает код более читабельным), следует отметить, что SIGKILL = 9он определен POSIX , поэтому в -9настоящее время он довольно переносим (и не зависит от ядра или архитектуры).
Андреа Корбеллини

Ответы:

36

Вы можете использовать вашу оболочку, чтобы выполнить эту задачу для вас:

kill -9 $(pidof middleman)

Оболочка выполняет команду в pidof middlemanпервую очередь. Выходные данные pidof (8) - это идентификатор процесса. Таким образом, оболочка заменяет pidof-команду идентификатором процесса и выполняет kill -9 18845(или любой другой правильный идентификатор процесса).

QBi
источник
Какая разница между этим и kill -9 $(pgrep middleman)?
Аарон Франке
54

Существует еще более простое решение, чем у qbi: killallдавайте убивать процессы по имени и указывать сигналы.

killall -9 middleman

Смотрите man killallдля получения дополнительной информации и дополнительных опций (их довольно много).

Как следует из названия, это посылает сигнал всем именованным процессам middleman. Но это не отличается от других способов (как pkill). Кроме того, pkill -9 middlemanбудут нацелены процессы, имена которых совпадают, но не совпадают middleman, например middleman2, также.

Герхард Бургер
источник
2
killallдля победы!
Андреа Корбеллини
4
убить всех посредников? о дорогой ...
Тобиас Кинцлер
16

Другие ответы совершенно правильны, но я мог бы также добавить третий вариант, чтобы все они были описаны здесь. Вы также можете использовать:

pkill -9 middleman

Смотрите man pkillдля получения дополнительной информации и дополнительных опций.

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

Роби Басак
источник
Странно, здесь не работает. И неmiddleman*
mreq
1
Ах. Если присмотреться поближе, кажется, что вы хотите убить интерпретатора ruby, а не процесс, который действительно вызывается middleman. Это то , где различия в том , как именно pkill, killall, pidofи grepматч процессы действительно начинают дело!
Роби Басак
12
pkill -9 -f middleman

-fОпция позволяет сопрягать полную командную строку, а не только имя процесса.

Обратите внимание, что это -9должен быть сигнал последней инстанции, а не то, что обычно используется.

jlliagre
источник
1
Благодарность! Мне действительно нравится способность соответствоватьcomplete command line
cwd
полная командная строка действительно круто!
okwap
10

Просто для удовольствия, я хотел бы добавить более руководство, старый школьный путь

kill -9 `ps aux | grep middleman | awk '{print $2}'`
slipset
источник
1
Я сделал это на работе несколько лет назад, и администратор посмотрел на меня: «Хорошо, дедушка». Можно также добавить grep -v grep перед awk, чтобы удостовериться, что она также не уничтожает команду grep.
Iain Holder
@gerhard, спасибо за редактирование, не могу найти галочки на моем iPad. grep -v - хорошая идея ...
slipset
Настоящий способ старой школы - писать, ... grep [m]iddleman ...чтобы не убить grepпроцесс случайно. Таким образом, grep не может сравниться сам по себе из-за забавных цитат.
Микко Ранталайнен
1
killall -9 -ir regex_pattern

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

Бор
источник