дубликат fd из python для дочернего процесса - PullRequest
0 голосов
/ 20 сентября 2011

Мне кажется, у меня проблема с устройством ttyUSB, вызванная одновременным открытием двух открытых файлов ttyUSB из разных процессов. это выглядит так:
У меня есть основной процесс Python, который открывает несколько файловых процессов ttyUSB, чтения, записи, закрытия и открытия (с popen) для обработки каждого ttyUSB (конечно, после закрытия fd).
когда я сделаю 'lsof | grep ttyUSB 'выглядит так, как будто все файлы, которые были открыты в главном процессе при запуске дочернего процесса, связаны с дочерним процессом, даже если они уже были закрыты основным процессом. (кстати, fd не связаны с основным процессом)

это нормальное поведение? (tinycore, kernal 2.6.33.3), у меня есть способ предотвратить это?

спасибо.

1 Ответ

0 голосов
/ 20 сентября 2011

По умолчанию любые файловые дескрипторы, которые процесс открывает, когда он разветвляется / исполняется (что происходит во время popen()), наследуются дочерним процессом.Если это не то, что вам нужно, вам нужно будет либо вручную закрыть дескрипторы файлов после разветвления, либо установить fds как close-on-exec, используя fcntl(fd, F_SETFD, FD_CLOEXEC).(Это заставляет ядро ​​автоматически закрывать файловый дескриптор при запуске нового процесса.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...