python - 如何获取子进程的打开文件?

标签 python linux posix fsync

如何获取子进程的打开文件?

我打开了一个生成文件的子进程,我想获取这些文件的文件描述符以对它们进行 fsync

所以如果我有这样的代码:

p = subprocess.Popen([
            'some_program'
])

进程p生成一些文件 我可以使用以下方法获取子进程的进程 ID:

p.pid

但是我怎样才能得到这些文件的 fd 以在它们上调用 flush 和 fsync()?

实际上我找到了一个名为“lsof”的实用程序(列出打开的文件) 但是我的系统没有安装或支持它,所以我没有对它做进一步的调查,因为我真的需要一个标准的方法

谢谢

最佳答案

每个进程都有自己的文件描述符表。如果您知道子进程使用 FD 8 打开某个文件(这很简单,只需列出 /proc/<pid>/fd ),当您执行 fsync(8) 时您同步的是进程的文件,而不是 child 的。

这同样适用于所有使用文件描述符的函数:fread , fwrite , dup , close ...

得到fsync的效果, 你可以调用 sync反而。

您可以改为实现某种 RPC 机制。例如,您可以添加一个信号处理程序,使 child 运行 fsync当它收到 SIGUSR1 时在所有打开的 FD 上。

关于python - 如何获取子进程的打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12940883/

相关文章:

python - 在python中获取第n行字符串

python - 如何从生成的 Django 表单中删除文本?

python - 应用引擎 : What is the lifetime of the app-level registry in webapp2

linux - 颠倒程序在/usr/bin/games

c++ - QPainter 保存状态

c - mkdir 系统调用偶尔会创建不可读的目录

c - 如何修复 pid 取反时 kill 函数的 'No such process' 错误

python + eyeD3 : cannot save date to mp3 metadata

linux - 什么选项将使 Grep 命令从下到上搜索?

c - 如何标记 shell 输入?