当前位置: 技术问答>linux和unix
如何保证 shell 程序只有单一instance运行?
来源: 互联网 发布时间:2015-09-03
本文导语: 在linux下执行 PG=`basename $0` PN=`ps -ef -o etime -o args | grep "$PG" | awk '((substr($1,1,1)>0)||(substr($1,length($1)-1)>0))' | wc -l` echo $PN 得出的结果=3 PG=`basename $0` PN=`ps -ef | grep "$PG"| grep -v "grep" | awk 'BEGIN {a=0...
在linux下执行
PG=`basename $0`
PN=`ps -ef -o etime -o args | grep "$PG" | awk '((substr($1,1,1)>0)||(substr($1,length($1)-1)>0))' | wc -l`
echo $PN
得出的结果=3
PG=`basename $0`
PN=`ps -ef | grep "$PG"| grep -v "grep" | awk 'BEGIN {a=0;} {a++;} END{print(a)}'`
echo $PN
得出结果=2
好像应该执行出来等于1才对。怎么回事?
给我感觉似乎``里面在grep $PG的时候把$PG的内容又运行出来一个,反而这段脚本本身就导致脚本重复执行了。。。
PG=`basename $0`
PN=`ps -ef -o etime -o args | grep "$PG" | awk '((substr($1,1,1)>0)||(substr($1,length($1)-1)>0))' | wc -l`
echo $PN
得出的结果=3
PG=`basename $0`
PN=`ps -ef | grep "$PG"| grep -v "grep" | awk 'BEGIN {a=0;} {a++;} END{print(a)}'`
echo $PN
得出结果=2
好像应该执行出来等于1才对。怎么回事?
给我感觉似乎``里面在grep $PG的时候把$PG的内容又运行出来一个,反而这段脚本本身就导致脚本重复执行了。。。
|
up!
不如把后面的awk暂时去掉,看看出来的究竟是哪些行。
不如把后面的awk暂时去掉,看看出来的究竟是哪些行。
|
使用一个临时文件作为临界量处理应该好一点。
程序应该是因为你的shell命令启动了子shell造成的。
或者你可以使用$$变量记录你当前运行shell的pid号,以后运行时检查一下这个pid号还存在不存在就可以了
程序应该是因为你的shell命令启动了子shell造成的。
或者你可以使用$$变量记录你当前运行shell的pid号,以后运行时检查一下这个pid号还存在不存在就可以了
|
加一个grep -v "grep" 是应该减去一等于2才对。