Shell脚本单实例实现方式

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...
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容