释放文件锁时如何通知另一个进程?
Posted
技术标签:
【中文标题】释放文件锁时如何通知另一个进程?【英文标题】:how to notify another process when file lock is released? 【发布时间】:2019-12-27 01:51:04 【问题描述】:我有一个由两个进程组成的小应用程序。
进程 A 下载一个文件。进程 B 使用下载的文件。
当进程 A 下载文件时,它会获取文件锁定。进程 B 不断检查正在下载的文件是否被锁定。
一旦下载完成,进程A会释放文件锁,下载的文件就可以被进程B使用了。
在进程 B 中,我有专门的线程来检查锁是否被释放。
我想避免连续文件锁定检查的循环。是否有类似于select
或poll
系统调用的方式,使用该系统调用进程B 会收到有关文件锁被释放的通知?
我已经浏览了 fcntl,flock 的手册页,但我没有找到方法。
【问题讨论】:
可能有一种使用 inotify 的方法。但是我对inotify并不完全熟悉。您也可以使用 unix 套接字来完成此操作:进程 A 可以打开一个 AF_UNIX 套接字,侦听抽象名称。如果知道抽象名称,任何进程 B(甚至多个)都可以连接到套接字。进程 A 完成后,它可以关闭每个获取的连接。进程 B 连接到套接字的文件描述符将变得可读;从套接字读取时,将返回一个错误,指示 EOF。这将是您通知流程 A 已完成。 进程 B 是否可以阻塞等待获取锁,或者在此期间它需要做其他事情吗? (如果是后者,可能是专门用于等待锁的线程?) 后一种情况。编辑了问题。 【参考方案1】:使用IPC可以实现: Inter-process communication 下载完成后进程A告诉B下载完成。
或者你可以使用网络连接通知B,但我不建议这样做。
【讨论】:
以上是关于释放文件锁时如何通知另一个进程?的主要内容,如果未能解决你的问题,请参考以下文章