如何终止后台运行的脚本,但只获取使用特定标志运行时脚本的 PID

如何终止后台运行的脚本,但只获取使用特定标志运行时脚本的 PID

我可以在后台运行多个 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 pgreppgreppkill使用类似的语法:

-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$)"

相关内容