我尝试按名称关闭进程(和子进程)(我从这个网站获得了这两个进程并对其进行了调整):
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/null
or隐藏它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