我有一个简单的锁定机制,如果一个进程能够在特定路径x上调用mkdir,那么进程将赢得一个锁。
我想要做的是让其他进程能够搜索哪个进程拥有锁。
这样做的一种方法是使用ps
并查找哪些进程具有打开的文件 - 所以我想要做的是将x与创建它的进程相关联。我怎么能这样做?
例如,我可以阅读该文件,并确定哪个进程ID负责创建它?
答案 0 :(得分:1)
lsof /path/to/directory
可以告诉哪个进程当前已锁定该文件。检查输出中的FD列:
你 - 文件是开放的阅读和写作
w - 文件已打开以进行写入
r - 文件已打开以供阅读。
但无论如何它显示哪个进程当前在指定时间锁定了文件,但是您无法确定哪个进程创建了文件/目录。 作为解决方案,您可以使用“PID”扩展名命名目录,即:
mkdir /path/to/somedir/yourdir$$
或
mkdir /path/to/somedir/yourdir & echo $! > /path/to/pidfile
有关文件操作的更详细日志,loggedfs
可能有所帮助。它允许记录文件系统中的每个操作(我相信它会记录创建该文件的PID)。
答案 1 :(得分:0)
我查了一下,我认为不可能读取文件并确定PID创建它。所以我所做的就是这样做:
#!/usr/bin/env bash
set -e
mkdir x
# we have succeeded acquiring the lock
mkdir "x/$$"
# just wrote the PID of this process to a directory name within x
所以现在我们可以通过以下方式读取创建x的PID:
ls x