while循环以确定脚本的另一个实例是否正在运行

时间:2018-03-27 23:48:03

标签: bash while-loop ps

我正在尝试确定我的bash脚本的另一个实例是否正在运行,并等到这个实例是唯一的实例,然后继续其他的东西。

我尝试了以下内容:

#!/bin/bash

while [[ $(ps aux | grep $0 | wc -l) > 2 ]]; do
    echo another instance already running, waiting. 
    # Next line is for debugging:
    ps aux | grep $0 | wc -l
    sleep 1
done

echo I am now the only instance, ready to proceed

# do stuff

我也尝试了`expr $(ps aux | grep $0 | wc -l)`

即使while循环中的命令输出为while,这两个循环都会进入2循环(这是我在运行一个实例时所期望的输出,因为{{1}也计算ps aux

我在这里做错了什么?关于如何处理此问题的任何其他建议?

额外评论:我知道为了使其能够正常工作,如果我检测到两个以上正在运行的实例,我将不得不结束脚本,否则他们可能会永远陷入grep循环。一旦我正确地运行循环,我将在循环之前添加它。 此外,我将确保脚本按其完整路径运行,因此使用while不会导致混淆。

0 个答案:

没有答案