背景
我有一些想要终止的 root 进程,更确切地说是一些tcpdump
进程。因此,我需要使用sudo kill
。
我当前的命令如下所示:
sudo kill $(ps aux | grep '[t]cpdump' | awk '{print $2}'
问题
有什么想法可以扩展命令(保持其为一行)以便将如下所示的输出重定向到日志文件?
如果成功:
成功!已终止进程:pid1 pid2...
如果发生故障:
错误!一些错误信息。
简单的重定向是不够的,因为 kill 命令不会输出它杀死的进程。
答案1
如果 killall 对你不起作用,而你需要匹配完整的命令行,那么总是pgrep -f
+ bash + 日志记录,(甚至技术上保持在一行上...)
首先几行
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
或者代替 if
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
或者,重定向所有 tee,而不是所有的 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
答案2
使用killall
。
killall -v tcpdump
如果您需要更多诊断,请检查的返回代码killall
。