Shell单进程实例的实现方式
需求背景:电视每次进行STR开机后会启动一个Shell脚本,如果多次快速STR开关机,同个脚本有多个进程实例同时运行的可能;虽然最终实验STR场景下,执行到一半的脚本只会被挂起,开机后再继续执行,但既然想到这个情况,就把问题抽象出来吧。
抽象需求:如何实现Shell脚本单进程实例
1. 通过检查进程名是否运行
#!/system/bin/sh
script_file_name=`basename $0`
if [ `pgrep -c -f $script_file_name ` -gt 1 ]; then
echo "$script_file_name is running, exit."
exit 0
fi
# You task...
2. 通过普通文件的创建来检查进程是否运行中
#!/system/bin/sh
PROCESS_FLAG_FILE="/tmp/ricky.lock"
function delProcessFlagFile {
rm -f $PROCESS_FLAG_FILE
}
if [ -f $PROCESS_FLAG_FILE ]; then
echo "script is running, exit."
exit 0
fi
touch $PROCESS_FLAG_FILE
sync
trap delProcessFlagFile EXIT
# You task...
3. 通过文件锁flock进行加锁
exec 6<> filelock
flock -n 6 || {
echo "Script is running..."
exit 1
}
# You task...