文件锁——flock

flock是一个建议性锁,用于在多个进程操作同一文件时避免数据混乱。它提供共享锁和排他锁,允许进程检测并控制文件的锁定状态。在Linux中,flock命令常用于实现并发读写文件的控制,通过锁定文件防止数据冲突。例如,定时任务可能会使用flock配合-xn选项来确保脚本的独占执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

场景

简介

原理

语法

选项

示例

参考 


场景

在多个进程同时操做同一份文件的过程当中,很容易致使文件中的数据混乱,须要锁操做来保证数据的完整性,这里介绍的针对文件的锁,称之为“文件锁”-flock。

简介

flock,建议性锁,不具有强制性。一个进程使用flock将文件锁住,另外一个进程能够直接操做正在被锁的文件,修改文件中的数据,缘由在于flock只是用于检测文件是否被加锁,针对文件已经被加锁,另外一个进程写入数据的状况,内核不会阻止这个进程的写入操做,也就是建议性锁的内核处理策略。

原理

flock命令通过给某个文件、目录上锁来告诉其它进程自己的状态,也就是说基于文件锁实现程序控制。

支持的文件锁有两种:

  • 共享锁(shared lock)

    当文件被上了共享锁之后,其他进程可以继续为此文件加共享锁,但不能添加排他锁。被上锁的文件会有一个共享锁计数,每添加一个共享锁,计数 +1,每解锁一个共享锁,计数 -1,只有当共享锁计数为0时,才可以为其添加排他锁。

  • 排他锁(exclusive lock )

    当文件被上了排他锁之后,在解锁之前,其它进程不能为该文件添加共享锁和排他锁

语法

flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>

file:被锁的文件

选项

参数
说明
-s--shared共享锁,或者称为读锁
-u--unlock手动释放锁,一般情况不必须,当FD关闭时,系统会自动解锁
-w--wait   --timeout seconds设置阻塞超时,当超过设置的秒数时,退出阻塞模式,返回1
-x -e--exclusive获取一个排它锁,或者称为写锁,为默认项
-n  -nb--nonblock非阻塞模式,当获取锁失败时,返回1而不是等待
-c--command在shell中执行其后的语,用于如果命令产生子进程时会不受锁的管控
-V--version显示版本
-h--help显示帮助
-o--close在运行命令前关闭文件的描述符号,

参考

示例

定时任务常用,锁文件(例中为/tmp/stargate.lock)如果不存在,会自动创建

*/5 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &'

参考 

Linux 基于flock命令实现多进程并发读写文件控制 - 码农教程 (manongjc.com)http://www.manongjc.com/detail/27-zdcyputvnvqftqd.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值