如何获取子进程的打开文件?在
我打开了一个生成文件的子进程,我想获取这些文件的文件描述符对它们进行fsync
如果我有这样的代码:
p = subprocess.Popen([
'some_program'
])
进程p生成一些文件
我可以使用以下方法获取子流程的进程id:
^{pr2}$
但是如何让这些文件的fd调用flush和fsync()?在
实际上我找到了一个名为“lsof”(列出打开的文件)的实用程序
但是我的系统没有安装或支持它,所以我没有对它做进一步的调查,因为我真的需要一个标准的方法
谢谢
Tags:
每个进程都有自己的文件描述符表。如果您知道子进程使用fd8打开了某个文件(这很简单,只需列出时,您正在同步您的进程的文件,而不是子进程的文件
/proc/<pid>/fd
),那么当您执行^{这同样适用于所有使用文件描述符的函数:
fread
,fwrite
,dup
,close
。。。在要获得
fsync
的效果,可以改为调用sync
。在相反,您可以实现某种RPC机制。例如,您可以添加一个信号处理程序,使子进程在收到SIGUSR1时在所有打开的fd上运行
fsync
。在不能代表另一个进程进行fsync。另外,您可能需要flushing,而不是fsync。也不能代表另一个进程刷新。重新考虑你的要求。在
如果您想使用压缩的解决方案,而不是转到/proc/pid/fd,可以选择使用psutils的lsof
相关问题 更多 >
编程相关推荐