bash 按名称杀死进程

bash 按名称杀死进程

我尝试按名称关闭进程(和子进程)(我从这个网站获得了这两个进程并对其进行了调整):

read -p "Set process name: " PS

# first option
f() { ps ax | grep "$1" | grep -v grep | awk '{print $1}' | xargs kill -9; }
f $PS

# second option
for pid in $(ps -ef | awk '/$PS/ {print $2}'); do kill -9 $pid; done

# end of bash
if [  $? -gt 0 ]; then
   echo "no process:" $PS
else
   echo "Finished"
fi

但我不知道两者哪个更有效(或者以上都不是)

另外,第二个循环没有完成(也就是说,如果没有进程,它应该退出“no process:”进程名称),但它直接进入“Finished”

这两种情况都存在kill命令问题。如果没有进程,则会出现一条消息,指示有关使用终止的选项。我可以用&> /dev/nullor隐藏它set +m, set -m,但我不知道是否kill会有任何标志(开关)来使输出静音

更新:

感谢@steeldriver,我能够看到 awk 不接受变量 (/$PS/) 的错误,所以我找到了这个解决方案这里:

并替换这个:

for pid in $(ps -ef | awk '/$PS/ {print $2}'); do kill -9 $pid; done

有了这个:

for pid in $(ps -ef | grep "$PS" | awk '{print $2}'); do kill -9 $pid; done

相关内容