You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

shell单实例脚本中file descriptor与flock的工作原理咨询

关于flock与文件描述符100的逻辑说明

1. 100>/var/lock/dobackup.lock的作用

这是Bash的文件重定向语法,作用是:为当前括号()包裹的子shell进程,打开编号为100的文件描述符,并将该描述符绑定到/var/lock/dobackup.lock文件(写入模式,文件不存在则自动创建)。
子shell内执行的所有命令,都可以访问这个已经打开的文件描述符100,且直到整个子shell执行完毕退出前,该文件描述符会一直处于打开状态。

2. flock -n 100的作用

flock是基于已打开的文件描述符实现文件锁的工具,而非直接基于文件路径加锁:

  • 这里的100就是指定要给文件描述符100对应的锁文件,加排他锁
  • -n参数表示非阻塞模式:如果当前锁已经被其他进程持有,flock会直接返回非0的错误退出码,而非阻塞等待锁释放
  • 当flock加锁失败后,就会触发后面的|| another_instance逻辑,执行退出操作

这种基于文件描述符加锁的方式最大的优势是:锁的生命周期和持有锁的进程绑定,进程无论正常退出还是异常崩溃,系统都会自动回收其打开的文件描述符,锁也会自动释放,不会出现手动管理锁文件时常见的“进程异常退出遗留脏锁文件,导致后续实例永远无法启动”的问题。

3. 编号100的特殊含义说明

100本身没有任何特殊含义。
Linux系统默认预留了0、1、2三个文件描述符分别对应标准输入、标准输出、标准错误,用户自定义的文件描述符只要选择大于2的未被占用的编号即可。这里选择100只是选了一个数值较大的编号,避免和脚本内其他可能用到的自定义文件描述符产生冲突,你替换为3、20、123等其他数值,逻辑完全不会受影响。

内容的提问来源于stack exchange,提问作者misterblack0101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:15:04