fd从python复制到子进程

时间:2011-09-19 22:16:16

标签: python linux process linux-kernel

我认为我的ttyUSB设备存在问题,因为不同进程同时有2个打开的ttyUSB fd。 它是这样的:
我有一个主要的python进程,打开几个ttyUSB fd,读取,写入,关闭和打开进程(使用popen)来处理每个ttyUSB(当然在fd关闭后)。 当我做'lsof | grep ttyUSB'看起来就像子进程启动时在主进程中打开的所有fd一样,与子进程相关联,即使它们已经被主进程关闭了。 (顺便说一句,fd与主进程无关)

这种行为正常吗? (tinycore,kernal 2.6.33.3),我有办法阻止吗?

感谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,进程在forks / execs(在popen()期间发生)时打开的任何文件描述符都由子进程继承。如果这不是您想要发生的,您将需要在分叉后手动关闭文件描述符,或者使用fcntl(fd, F_SETFD, FD_CLOEXEC)将fds设置为close-on-exec。 (这使得内核在执行新进程时会自动关闭文件描述符。)