fd从python复制到子进程

fd从python复制到子进程,python,linux,process,linux-kernel,Python,Linux,Process,Linux Kernel,我想我有一个ttyUSB设备的问题,它是由两个不同进程同时打开的ttyUSB fd引起的。 事情是这样的: 我有一个主要的python进程,它打开几个ttyUSB fd、读、写、关闭和打开进程,使用popen处理每个ttyUSB,当然是在fd关闭之后。 当我执行“lsof | grep ttyUSB”时,看起来好像子进程启动时在主进程中打开的所有fd都与子进程关联,即使它们已经被主进程关闭。顺便说一句,fd与主进程没有关联 这种行为正常吗?tinycore,内核2.6.33.3,我有办法防止它吗

我想我有一个ttyUSB设备的问题,它是由两个不同进程同时打开的ttyUSB fd引起的。 事情是这样的: 我有一个主要的python进程,它打开几个ttyUSB fd、读、写、关闭和打开进程,使用popen处理每个ttyUSB,当然是在fd关闭之后。 当我执行“lsof | grep ttyUSB”时,看起来好像子进程启动时在主进程中打开的所有fd都与子进程关联,即使它们已经被主进程关闭。顺便说一句,fd与主进程没有关联

这种行为正常吗?tinycore,内核2.6.33.3,我有办法防止它吗


谢谢。

默认情况下,当进程在popen期间分叉/执行时打开的任何文件描述符都由子进程继承。如果您不希望发生这种情况,则需要在分叉后手动关闭文件描述符,或者使用fcntlfd、F_SETFD、FD_CLOEXEC将fds设置为close on exec。这使得内核在执行新进程时自动关闭文件描述符。

因此,如果主进程打开了fd X,并且打开了另一个带有close on exec标志的进程,那么它是否也会影响主进程fd?我认为它正是我想要的。我会给它一个测试,我很确定这导致了我的ttyUSB问题。。谢谢