使用“pgrep”模拟“ps -ef”以在“for i in”循环中使用

使用“pgrep”模拟“ps -ef”以在“for i in”循环中使用

乌班图16.04

我习惯使用这个命令行来杀死任何与命令匹配的进程

for i in $(ps -ef | grep COMMAND | awk '{ print $2 }'); do kill -9 "$i" &>/dev/null;done

shellcheck 不太喜欢它并建议

root@singa /home # shellcheck run

In run line 4:
for i in $(ps -ef | grep COMMAND | awk '{ print $2 }'); do kill -9 "$i" &>/dev/null;done
           ^-- SC2009: Consider using pgrep instead of grepping ps output.

在这里完成此操作需要什么标志来替换 XXX

for i in $(pgrep XXX | grep COMMAND | awk '{ print $2 }'); do kill -9 "$i" &>/dev/null;done

我已经检查了 pgrep 的手册页。

答案1

for pid in $(pgrep command); do
    kill -9 $pid
done

或者,更好的是:

pkill -9 command

顺便说一句,无私地使用kill -9有时会导致僵尸爆发、孤立文件、永久临时文件和其他弊病。请考虑仅使用kill默认发送SIGTERM而不是SIGKILL

答案2

我已经完成了下面的方法

for i in pickup hald-runner; do pgrep $i | awk '{print "kill" " "  $1}'| sh;done

这里pickup,hald-runner是进程名称

相关内容