【问题标题】:Pid file and prevent a duplicate instance from running?Pid 文件并防止重复实例运行?
【发布时间】:2014-08-22 17:47:23
【问题描述】:

我在我们的一个脚本的顶部发现了以下几行。我知道它会验证 PID 文件是否已经在运行它会杀死脚本运行两次,但我真的不明白每个语句的作用是什么?

例如,if kill -0 &>1 > /dev/null $pid; then。有人可以帮我理解这背后的逻辑吗?

pidfile=/tmp/backup_meb.pid
if [ -e $pidfile ]; then
    pid=`cat $pidfile`
    if kill -0 &>1 > /dev/null $pid; then
        echo "Already running"
        exit 1
    else
        rm $pidfile
    fi
fi
echo $$ > $pidfile

【问题讨论】:

    标签: bash shell process


    【解决方案1】:

    kill man page:

    如果 sig 为 0,则不发送信号,但仍会进行错误检查。

    if 对list 的返回码进行操作,它会执行。本例返回状态为kill

    【讨论】:

      【解决方案2】:

      如果pidfile存在则

      将 pid 设置为 pidfile 的内容

      如果 pid 是一个有效的进程 ID

      打印“已经运行”并退出

      否则

      删除pid文件

      创建一个包含当前进程 ID 的新 pidfile

      kill -0 命令向进程发送空信号,退出代码将告诉您该进程是否存在/是否可以访问。 &>1 将标准输出重定向到 /dev/null。 $$ 是 bash 中的一个内部变量,它包含脚本(或 shell)本身的进程 ID。

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 2021-05-05
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        • 2023-04-05
        相关资源
        最近更新 更多