手动将文件与流程关联

问题描述 投票:2回答:2

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

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

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

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

bash shell process ps
2个回答
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)。


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
© www.soinside.com 2019 - 2024. All rights reserved.