Я запускаю команду 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>
Как я могу сделать это изящно?
nano /usr/bin/ffmpegk
. , , ,ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1
, , , ,chmod a+rx /usr/bin/ffmpegk
kill -9
если не совпадает ни один процессgrep
, вы должны использовать,awk
чтобы соответствовать на имя:ps -A | awk "\$4 == \"$1\" { print \$1; }"
killall
могу сделать этоисточник
killall --regexp "appl.*me"
Хотя могут быть разные реализации killall. Смman killall
.kill -9 pid
я думаю, @ ŁukaszD.Tulikowski - лучшее рабочее решение, специально предназначенное для сценариев bash.источник
Мой подход похож на @
Łukasz D. Tulikowski
's. Вместо использованияgrep <application_name>
; Я использовалgrep "[a]pplication_name"
, который не совпадает с собственной командной строкой процесса.Выражение в квадратных скобках является частью
grep
сопоставления с образцом класса символов. (Ссылка) .Вы можете использовать,
awk
чтобы получить первый столбецps
вывода.Вернет список PID
После добавления у
kill -9 $1
вас есть команда, которая убивает все PIDисточник
grep
вместо того,awk
чтобы делать тест более правильно?grep
будет соответствовать имена, которые включают цель как подстроку, например.