我在其中一个脚本的顶部找到了以下行。我知道它验证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
答案 0 :(得分:3)
答案 1 :(得分:2)
如果pidfile存在则
将pid设置为pidfile的内容
如果pid是有效的进程ID
打印"已经运行"并退出
,否则
删除pidfile
创建一个包含当前进程ID的新pidfile
kill -0命令向进程发送一个空信号,退出代码将告诉您进程是否存在/是否可以访问。 &> 1将stdout重定向到/ dev / null。 $$
是bash中的内部变量,它包含脚本(或shell)本身的进程ID。