Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取子流程的打开文件?_Python_Linux_Posix_Fsync - Fatal编程技术网

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

Python 如何获取子流程的打开文件?,python,linux,posix,fsync,Python,Linux,Posix,Fsync,如何获取子流程的打开文件 我打开了一个生成文件的子进程,我想得到这些文件的文件描述符,对它们进行fsync 如果我有这样的代码: p = subprocess.Popen([ 'some_program' ]) 进程p生成一些文件 我可以使用以下方法获取子流程的流程id: p.pid 但是我如何才能让这些文件的fd调用flush和fsync() 实际上,我发现了一个名为“lsof”(列出打开的文件)的实用程序 但我的系统上没有安装或支持它,所以我没有对它做进一步的调查

如何获取子流程的打开文件

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

如果我有这样的代码:

p = subprocess.Popen([
            'some_program'
])
进程p生成一些文件 我可以使用以下方法获取子流程的流程id:

p.pid
但是我如何才能让这些文件的fd调用flush和fsync()

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


感谢

如果您想使用打包解决方案,而不是转到/proc/pid/fd,一个选项是使用lsof

如果您想使用打包解决方案,而不是转到/proc/pid/fd,一个选项是使用lsof

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

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

要获得
fsync
的效果,可以调用
sync


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

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

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

要获得
fsync
的效果,可以调用
sync


您可以改为实现某种RPC机制。例如,您可以添加一个信号处理程序,使子进程在接收到SIGUSR1时在所有打开的FD上运行fsync。此外,您可能需要刷新,而不是fsync。您也不能代表另一个进程刷新。重新考虑您的需求。

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

我认为您可以在procfs中找到这些信息,通常安装在/dev/proc上。除此之外,我不知道。通过查看
/proc/$PID/fd/
,可以获得打开的文件描述符列表。它们是指向原始打开文件的符号链接。我不知道如果你在另一个进程中打开它们,
fsync
是否会起作用。你到底想做什么?即使您得到了文件描述符,也肯定不能对它们调用
fsync
,因为它们在父进程中没有任何意义。我想您可以在procfs中找到这些信息,通常安装在/dev/proc上。除此之外,我不知道。通过查看
/proc/$PID/fd/
,可以获得打开的文件描述符列表。它们是指向原始打开文件的符号链接。我不知道如果你在另一个进程中打开它们,
fsync
是否会起作用。你到底想做什么?即使您获得了文件描述符,也肯定不能对它们调用
fsync
,因为它们在父进程中没有任何意义。您的意思是从shell运行sync命令吗?它会刷新系统上所有进程的所有文件,在云主机(我运行程序的地方)上可能需要几秒钟的时间。不,我指的是
unistd.h中的
void sync(void)
C函数。这与
sync(1)
程序基本相同。我使用的是python,你知道它的python对应物或者如何从python调用它吗?如果
sync
shell命令太慢,那么C函数也是如此。您需要不同的解决方案。是否要从shell运行sync命令?它会刷新系统上所有进程的所有文件,在云主机(我运行程序的地方)上可能需要几秒钟的时间。不,我指的是
unistd.h中的
void sync(void)
C函数。这与
sync(1)
程序基本相同。我使用的是python,你知道它的python对应物或者如何从python调用它吗?如果
sync
shell命令太慢,那么C函数也是如此。你需要一个不同的解决方案。