我可以在后台运行多个 bash 脚本实例,一切都很顺利。我已将其设置为某些实例带有-x
标志,而某些实例则不带有标志。请参阅:
./test.sh &
./test.sh &
./test.sh -x &
./test.sh -x &
现在,我想终止所有使用该标志运行的脚本-x
。我总是使用以下命令终止在后台运行的脚本:
ps -aux | grep -Po "^\S{1,}\s*\K\d*(?=.*test.sh$)" | \
while read -r level
do
kill $level
done
但是,ps -aux
不显示脚本运行时给出的任何参数/标志。因此,使用它时,我无法仅抓取使用 运行的脚本-x
。有解决方案吗?我只想终止使用 运行的后台脚本-x
。
答案1
使用pkill
带有-f
标志的命令。
该命令pkill test.sh
将终止所有使用test.sh
作为命令名称的进程。-f
标志的使用说明见man pgrep
,pgrep
并pkill
使用类似的语法:
-f, --full
该模式通常仅与进程名称匹配。当设置 -f 时,将使用完整命令行。
但是,您需要用引号将搜索模式括起来,并转义-
。-x
因此pkill -f "test.sh \-x"
只会终止test.sh
使用该标志运行的进程-x
。
答案2
尝试
ps -aF | grep -Po "^\S{1,}\s*\K\d*(?=.*test.sh -x$)"