我正在编写一个脚本(show_volume.sh),可以在短时间内多次调用.我需要一种方法来确定是否只有一个运行此脚本的实例.我想我可以使用ps,所以我在Bash中编写了这个函数:
is_only_process(){
PCOUNT=`ps -a | grep show_volume.sh | wc -l`
echo $PCOUNT
if (( PCOUNT==1 )); then
return 1
fi
return 0
}
Run Code Online (Sandbox Code Playgroud)
所以我添加了这两行
is_only_process
sleep 4
Run Code Online (Sandbox Code Playgroud)
并启动了这个脚本一次,但输出echo $PCOUNT对我没有任何意义.我总是按预期得到值2而不是1.当我运行此命令
ps -a | grep show_volume.sh | wc -l
在脚本运行时从另一个终端,我收到值1.当我连续多次运行此脚本时,几乎相同,例如使用for循环运行10次.当我在使用另一个终端时收到正确的值时,脚本本身会确定太高的值.
现在,为什么这个脚本会确定这些奇怪的值?
目前ps运行的过程grep show_volume.sh也在运行,所以你总是算上grep!
简单的解决方案grep s[h]ow_volume.sh.grep(不是shell)将折叠[h]to h并搜索你想要的东西,但你的grep将不匹配自己,因为它将在参数中有[].
pgrep 对于此任务也很有用,并且足够智能以始终排除自身.