Сценарій оболонки до -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.


2
Можна використовувати і -9з pkill...
Зупиніть шкодити Моніці

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(або будь-який правильний ідентифікатор процесу).


Яка різниця між цим і 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
Ага. Придивившись уважніше, здається, що ви хочете вбити перекладача рубіну, а не дійсно викликаного процесу middleman. Це те , де відмінності в тому , як саме pkill, killall, pidofі grepматч процеси дійсно починають справу!
Робі Басак

12
pkill -9 -f middleman

Цей -fпараметр дозволяє йому відповідати цілому командному рядку, а не лише імені процесу.

Зауважте, що це -9повинен бути крайнім сигналом, а не тим, що потрібно використовувати звичайно.


1
Спасибі! Мені дуже подобається вміння відповідатиcomplete command line
cwd

Повний командний рядок дійсно крутий!
okwap

10

Для розваги я хотів би додати більш ручний, старий шкільний спосіб

kill -9 `ps aux | grep middleman | awk '{print $2}'`

1
Я зробив це на роботі кілька років тому, і адміністратор подав мені погляд, який сказав "добре, дідусю". Можна також додати grep -v grep перед awk, щоб переконатися, що він також не вбиває команду grep.
Ієн Холдер

@gerhard, дякую за редагування, не вдалося знайти зворотних кліщів на моєму iPad. grep -v - хороша ідея ...
слайс

Справжнім способом старої школи було б написати, ... grep [m]iddleman ...щоб уникнути grepвипадкових процесів. Таким чином, греп не може відповідати собі через смішне котирування.
Мікко Ранталайнен

1
killall -9 -ir regex_pattern

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

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