Я иногда делаю это в своей оболочке:
sam@sam-laptop:~/shell$ ps aux | grep firefox | awk '{print $2}'
2681
2685
2689
4645
$ kill -9 2681 2685 2689 4645
Существует ли способ, которым я могу преобразовать несколько строк, содержащих PIDs в одну строку, разделенную пробелами? (Это является немного раздражающим для ввода PIDs каждый раз, когда и я действительно хотел бы учиться :))
Большое спасибо.
Для этого проще всего использовать xargs
ps aux | grep firefox | awk '{print $2}' | xargs kill -9
. Это вызовет команду kill со всеми pid-идентификаторами одновременно. (Именно то, что вы хотите)
pids=""
for pid in $(ps aux | grep firefox | awk '{print $2}')
do
pids=" $pid"
done
kill -9 $pids
вы можете сделать это просто с помощью awk
ps -eo pid,args | awk 'BEGIN{s="kill -9 "}$2~/bash/{s=s" "$1} END{system(s)}'
Я согласен со всеми остальными ответами об использовании pkill
, но, ... и вместо использования xargs
, ... вы можете подключить его к tr
:
kill $(ps aux | grep [f]irefox | awk '{print $2}' | tr '\n' ' ')
Также подумайте об использовании [f]
, чтобы не совпадать с самим процессом grep.
Используйте вместо него pkill . Также есть файл pgrep.
Это сделает то, что вы хотите, и насколько проще вы можете получить?
pkill firefox
Использование опции -9 для pkill будет тем, чем вы сейчас занимаетесь; однако избегайте SIGKILL:
Не используйте этот сигнал легкомысленно. У процесса не будет никаких шансов навести порядок. Он может оставить после себя потерянные дочерние процессы, временные файлы, выделенные блокировки, активные сегменты разделяемой памяти, занятые сокеты и любое количество других несоответствий состояния ресурсов. Это может привести к неожиданным и трудным для отладки проблемам в последующей работе системы. [ wlug.org ]
И:
Кстати, это одна из причин, по которой вам не следует регулярно использовать SIGKILL. SIGKILL следует использовать только тогда, когда процесс завис и не может быть уничтожен другим способом. Если вы используете SIGTERM или SIGINT в скрипте python, вы увидите, что mplayer БУДЕТ оставить терминал в состоянии USABLE. Если вы регулярно используете программы SIGKILL, у вас нет возможности что-либо очистить, и в некоторых ситуациях это может отрицательно повлиять на всю вашу систему.
SIGTERM - это сигнал по умолчанию, отправляемый командой kill shell. SIGINT - это сигнал, отправляемый из прерывания терминала (control-C). [ debian.org ]