手动将文件与流程关联

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

以上是关于手动将文件与流程关联的主要内容,如果未能解决你的问题,请参考以下文章

片段未与片段管理器关联。 (对话片段)

将现有图像文件与 Django 模型相关联

iOS:我可以手动将 wifi 网络与地理位置关联吗?

VSCode自定义代码片段——git命令操作一个完整流程

片段中的 super.onCreateView

教程4 - 验证和权限