在bash脚本中,我尝试使用以下行来确定是否另一个进程正在执行当前脚本:
/sbin/pidof -x $0 |wc -w
但是响应始终为2,而不是期望值1。

我试过以下电话:/sbin/pidof -x $0返回1个pid/sbin/pidof -x $0 |wc -w返回2/sbin/pidof -x $0 |head返回2点/sbin/pidof -x $0 |head |wc -w返回2/sbin/pidof -x $0 |head |tail返回2点/sbin/pidof -x $0 |head |tail |wc -w返回2

谁能建议一种替代方法(或修复方法)来实现我的目标,并解释为什么将输出管道输送到任何东西都会导致pidof输出变得“有点可笑”?

这是脚本当前使用pidof的方式,效果很好:

RUNNING=`/sbin/pidof -x $0`
RUNNING=`echo -n ${RUNNING} | wc -w`
[[ ${RUNNING} -gt 1 ]] && return

最佳答案

如果您只想阻止第二个正在运行的脚本,则可以使用以下方法:

pid=/tmp/$(basename $0).pid
[ -e $pid ] && exit 0;
trap 'rm -f $pid >/dev/null 2>&1;' 0
trap 'exit 2' 1 2 3 15
touch $pid

只需用这些行开始脚本即可。基本上,它检查文件,如果文件存在则停止执行。请注意,如果您杀死(-9)运行中的脚本,则有责任清理创建的pid文件。 Kill(-9)绕过了shell陷阱,否则将清除pid文件。

关于linux - pidof -x $ 0返回2而不是预期的1,是否有单行替代方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27125536/

10-10 20:56