我一直在尝试改进一些外壳代码,以实现破坏的锁定机制。
我的想法是通过在文件上调用rm来仅允许一个调用者完成同步。
PIDFILE=/tmp/test.pid
flag=$PIDFILE.flag
touch $flag
if [ -f $PIDFILE ]; then
ps | grep -qE '^\s*'$(cat $PIDFILE) && exit
fi
echo $$ > $PIDFILE
# this should succeed only for one process
rm $flag || exit
echo $$ > $PIDFILE
Run Code Online (Sandbox Code Playgroud)
我已经进行了一些并发呼叫,并为此投入了很多精力,但并没有遇到失败。
但这实际上是安全的吗?