Pid文件并阻止重复的实例运行?

时间:2014-08-22 17:47:23

标签: bash shell process

我在其中一个脚本的顶部找到了以下行。我知道它验证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

2 个答案:

答案 0 :(得分:3)

kill man page

  

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

如果对它执行的list的返回码进行操作。在这种情况下,返回状态为kill

答案 1 :(得分:2)

  

如果pidfile存在则

     
    

将pid设置为pidfile的内容

         

如果pid是有效的进程ID

         
      

打印"已经运行"并退出

    
         

,否则

         
      

删除pidfile

    
  
     

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

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