Используйте killall
.
killall -v tcpdump
Если вы хотите больше диагностики, проверьте код возврата killall
.
Фон
У меня есть некоторые корневые процессы, которые я пытаюсь убить, точнее, некоторые tcpdump
процессы. Следовательно, мне нужно использовать sudo kill
.
Моя текущая команда выглядит примерно так:
sudo kill $(ps aux | grep '[t]cpdump' | awk ''
Вопрос
Любые идеи по расширению команды (сохраняя ее однострочным) для вывода, как показано ниже, перенаправлены в файл журнала?
В случае успеха:
Успех! Убитые процессы: pid1 pid2 ...
В случае неудачи:
Ошибка! Некоторое сообщение об ошибке.
Простого перенаправления недостаточно, так как команда kill не выводит процессы, которые она уничтожила.
Используйте killall
.
killall -v tcpdump
Если вы хотите больше диагностики, проверьте код возврата killall
.
Если killall не работает для вас, и вам нужно соответствовать полной командной строке, всегда есть pgrep -f
+ bash + logging (даже технически хранится в одной строке ...)
Сначала несколько строк
if tempkill1=$(pgrep -f "your_pattern") then if kill $tempkill1 then echo Success killed $tempkill1 | tee -a logfile else echo Error could not kill $tempkill1 | tee -a logfile fi else echo No processes found | tee -a logfile fi
или вместо если
tempkill1=$(pgrep -f "your_pattern") && { kill $tempkill1 && echo Success \ killed $tempkill1 | tee -a logfile || echo Error could not kill \ $tempkill1 | tee -a logfile; } || echo No processes found | tee -a logfile
Или вместо всех тройников перенаправьте все stdout:
exec > >(tee -a logfile); tempkill1=$(pgrep -f "your_pattern") && { kill $tempkill1 \ && echo Success killed $tempkill1 || echo Error could not kill $tempkill1; } || \ echo No processes found; exec > /dev/tty
Конечно, без регистрации, вам нужно только pkill -f
, или очень незначительная регистрация успеха / неудачи, например:
pkill -f "your_pattern" && echo Success|tee -a log || echo Error|tee -a log