【发布时间】:2012-10-17 18:28:05
【问题描述】:
如何获取子进程的打开文件?
我打开了一个生成文件的子进程,我想获取这些文件的文件描述符以对它们进行 fsync
所以如果我有这样的代码:
p = subprocess.Popen([
'some_program'
])
进程p生成一些文件 我可以使用以下方法获取子进程的进程 ID:
p.pid
但是我怎样才能得到这些文件的 fd 以在它们上调用 flush 和 fsync() 呢?
实际上我找到了一个名为“lsof”的实用程序(列出打开的文件) 但是我的系统上没有安装或支持它,所以我没有做进一步的调查,因为我真的需要一个标准的方式
谢谢
【问题讨论】:
-
我想你可以在procfs中找到这些信息,通常挂载在/dev/proc上。更进一步,我不知道。
-
您可以通过查看
/proc/$PID/fd/来获取打开的文件描述符列表。它们是指向原始打开文件的符号链接。我不知道fsync如果您在另一个进程中打开它们是否会起作用。 -
你到底想做什么?即使你得到了文件描述符,你当然不能对它们调用
fsync,因为它们在父进程中没有任何意义。