手动将文件与流程关联

时间:2018-03-03 22:50:44

标签: bash shell process ps

我有一个简单的锁定机制,如果一个进程能够在特定路径x上调用mkdir,那么进程将赢得一个锁。

我想要做的是让其他进程能够搜索哪个进程拥有锁。

这样做的一种方法是使用ps并查找哪些进程具有打开的文件 - 所以我想要做的是将x与创建它的进程相关联。我怎么能这样做?

例如,我可以阅读该文件,并确定哪个进程ID负责创建它?

2 个答案:

答案 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