Perl Open 和 Flock 超时
Perl Open and Flock timeout
Perl 中的“open”函数是否会自动检查文件是否被锁定并等待解锁?如果是这样,它会等待多长时间,或者我如何控制那段时间?
我有 5 个分叉进程将数据附加到同一个文件。每个分叉进程基本上打开文件,然后聚集它。然后附加数据并关闭文件处理程序以解锁文件,以便其他派生进程可以使用它。
一切都按预期工作,但我担心如果其中一个派生进程花费太长时间来完成其任务,打开命令可能会超时。
不,open
根本不与锁交互。锁定文件只是防止其他人锁定它,没有别的。
flock
仅防止使用 flock
获取锁;它不会阻止文件被打开、读取、修改或删除。
flock
没有 LOCK_NB
标志将阻塞,直到可以获得锁,或者直到被信号中断。
flock
带有 LOCK_NB
标志将立即 return。
- 如果
flock
能够获得锁,它将 return 为真。 - 如果
flock
无法获得锁,它将return false,并设置errno
。$!{EINTR}
表示操作被信号中断。$!{EWOULDBLOCK}
表示需要等待,但指定了LOCK_NB
。