flock使用文件描述符和使用文件的区别

文章讲述了如何利用文件描述符在子进程中管理和控制flock锁,强调了锁与文件描述符的绑定关系以及在进程间共享的重要性。通过实例展示了子进程解锁如何影响父进程的锁状态。

使用带文件描述符的方法可以让你更好地控制和管理 flock 以及与锁相关的行为。当你在子进程或子shell中使用文件描述符时,文件锁可以跨越这些范围,并且只有在你显式地释放它时,锁才会被释放。

让我们看一个例子,更好地理解这一点。

假设我们有一个脚本 script_a.sh:

#!/bin/sh

lock_file="/tmp/script_b.lock"

touch "$lock_file"

# 使用带文件描述符的方法

(

flock -n 9 || { echo "Script B is locked, could not acquire lock."; exit 1; }

# 在子进程中执行脚本b

( ./script_b.sh ) &

) 9>"$lock_file"

在这段代码中,主 shell 脚本使用文件描述符 9 来创建并获取锁。当主脚本退出时,由于 script_b.sh 在子进程运行(使用 & 符号),script_b.sh 可以继承父进程(即主 shell 脚本)的文件描述符。

关键在于,script_b.sh 继承了文件描述符 9,而该描述符具有在退出时继续保持文件锁的特性。这意味着,即使主脚本已经退出,script_b.sh 仍然可以继续持有文件锁,直至其运行结束。

这里的一个重要概念是:锁是与文件描述符绑定的,而文件描述符可以在进程之间传递(例如从父进程传递给子进程)。因此,在这个例子中,锁的生命周期取决于文件描述符 9 何时被关闭。而由于 script_b.sh 继承了该文件描述符并一直保持打开状态,因此它可以在主进程退出后继续持有文件锁。

flock 命令会将锁状态与文件描述符状态联系起来。因此,在文件描述符关闭时,操作系统也会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值