Як вбити весь процес із заданим іменем?


16

Я запускаю команду ps -A | grep <application_name>і отримую такий список процесу:

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

Я хочу , щоб вбити весь процес зі списку: 19440, 21630, 22694.

Я спробував, ps -A | grep <application_name> | xargs kill -9 $1але це працює з помилками.

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

Як я можу це зробити витончено?

Відповіді:



9

Проблема полягає в тому, що ps -A | grep <application_name> | xargs -n1повертає результат таким чином

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

Ви можете використовувати awkдля отримання першого стовпця psвиводу .

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

Повернеться список PID

19440
21630
22694

І додаючи, у kill -9 $1вас є команда, яка вбиває всі PID-адреси

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

це ідеальний тест я його на Баш скрипт це вбиває processer негайно без помилок + навіть якщо процес is'nt почав він не показує ніяких помилок , який є те , що я хочу, ось приклад FFmpeg processer вбивці, nano /usr/bin/ffmpegk . . . . ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1 . . . . chmod a+rx /usr/bin/ffmpegk
Салем F

У мене є проблема з цим, коли я отримую результат, kill -9якщо жоден процес не відповідає
Daniel F

1
Замість цього grepви повинні використовувати awkдля того, щоб відповідати імені:ps -A | awk "\$4 == \"$1\" { print \$1; }"
Toby Speight

0

killall може це зробити.

$ killall application_name

Чи дозволяють kill all дозволити регулярне вираження у назві програми?
Łukasz D. Tulikowski

killall --regexp "appl.*me"Хоча можуть бути різні реалізації killall. Див man killall.
rudimeier

killall недостатньо інколи мені потрібно відправити його тричі, щоб вбити процес, і навіть не вдалося його вбити, kill -9 pidя вважаю, що @ ŁukaszD.Tulikowski є найкращим робочим рішенням, спеціально для bash-скриптів.
Салем Ф

-1
ps -eaf | grep -i applicationname| grep -iv 'grep'| awk '{print "kill -9" " "  $2}'|sh

Поки я ще не проголосував за це питання, ви не описали, чому це інше або краще, ніж інші рішення - дуже схожі на це - або описали, чому ОП мали проблеми з їх варіацією.
Джефф Шаллер

-2

Мій підхід подібний до @ Łukasz D. Tulikowski's. Замість використання grep <application_name>; Я використав grep "[a]pplication_name", який не відповідає власному командному рядку процесу.

Вираз квадратної дужки є частиною grepвідповідності шаблону класу символів 's. (Довідка) .


Ви можете використовувати awkдля отримання першого стовпця psвиводу.

ps -A | grep "[a]pplication_na" | awk '{print $2}' | xargs -n1

Повернеться список PID

7644
407
406

Пізніше додавши, у kill -9 $1вас є команда, яка вбиває всі PID

ps aux | grep "[a]pplication_na" | awk '{print $2}' | xargs kill -9 $1

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