Фон

У меня есть некоторые корневые процессы, которые я пытаюсь убить, точнее некоторые процессы tcpdump . Следовательно, мне нужно использовать sudo kill .

Моя текущая команда выглядит примерно так:

sudo kill $(ps aux | grep '[t]cpdump' | awk '{print $2}'

Вопрос

Любые идеи по расширению команды (сохраняя ее однострочным) для вывода, как показано ниже, перенаправлены в файл журнала?

  • В случае успеха:

    Успех! Убитые процессы: pid1 pid2 ...

  • В случае неудачи:

    Ошибка! Некоторое сообщение об ошибке.

Простого перенаправления недостаточно, так как команда kill не выводит процессы, которые она уничтожила.

2 ответа2

1

Используйте killall .

killall -v tcpdump

Если вы хотите больше диагностики, проверьте код возврата killall .

1

Если 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .