手动将文件与流程关联
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手动将文件与流程关联相关的知识,希望对你有一定的参考价值。
我有一个简单的锁定机制,如果一个进程能够在某个路径x上调用mkdir,它将赢得一个锁。
我想要做的是让其他进程能够搜索哪个进程拥有锁。
一种方法是使用ps
并找到哪些进程具有打开文件 - 所以我想要做的是将x与创建它的进程相关联。我怎样才能做到这一点?
例如,我可以读取文件,并确定哪个进程ID负责创建它?
答案
lsof /path/to/directory
可以告诉哪个进程当前已锁定文件。检查输出中的FD列:
你的文件是开放的阅读和写作
w - 文件已打开以进行写入
r - 文件已打开以供阅读。
但无论如何它显示哪个进程当前在指定时间锁定了文件,但是您无法确定哪个进程创建了文件/目录。作为解决方案,您可以使用“PID”扩展名命名目录,即:
mkdir /path/to/somedir/yourdir$$
要么
mkdir /path/to/somedir/yourdir & echo $! > /path/to/pidfile
有关文件操作的更详细日志,loggedfs
可能会有所帮助。它允许记录文件系统中的每个操作(我相信它会记录创建该文件的PID)。
另一答案
我查了一下,我认为不可能读取文件并确定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
以上是关于手动将文件与流程关联的主要内容,如果未能解决你的问题,请参考以下文章