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

2024-09-27 07:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

如果我有这样的代码:

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

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

^{pr2}$

但是如何让这些文件的fd调用flush和fsync()?在

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

谢谢


Tags: 文件方法代码id进程some流程program
3条回答

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

这同样适用于所有使用文件描述符的函数:freadfwritedupclose。。。在

要获得fsync的效果,可以改为调用sync。在

相反,您可以实现某种RPC机制。例如,您可以添加一个信号处理程序,使子进程在收到SIGUSR1时在所有打开的fd上运行fsync。在

不能代表另一个进程进行fsync。另外,您可能需要flushing,而不是fsync。也不能代表另一个进程刷新。重新考虑你的要求。在

如果您想使用压缩的解决方案,而不是转到/proc/pid/fd,可以选择使用psutils的lsof

相关问题 更多 >

    热门问题