代码如下:
#!/bin/bash LOCK_NAME="/tmp/my.lock" if ( set -o noclobber; echo "$$" > "$LOCK_NAME") 2> /dev/null; then trap 'rm -f "$LOCK_NAME"; exit $?' INT TERM EXIT ### 开始正常流程 sleep 10 ### 这里是要执行的内容,此处测试sleep 10秒 ### 正常流程结束 ### Removing lock rm -f $LOCK_NAME trap - INT TERM EXIT else echo "Failed to acquire lockfile: $LOCK_NAME." echo "Held by $(cat $LOCK_NAME)" exit 1 fi echo "Done." ### set -o noclobber 的意思: ### If set, bash does not overwrite an existing file with the >, >&, and <> redirection operators. ### 这样就能保证my.lock只能被一个进程创建出来。比touch靠谱多了。 ### trap 可以捕获各种信号,然后做出处理: ### INT 用来处理 ctrl+c取消脚本执行的情况。 ### TERM 用来处理 kill -TERM pid 的情况。 ### EXIT 不清楚 ### 另外,对于 kill -9 无效
测试:
两个脚本同时执行的话,后执行的脚本会显示以下提示内容。
热门文章