2011-09-19 8 views
0

나는 다른 프로세스에서 동시에 2 개의 열린 ttyUSB fd를 갖는 것으로 인한 ttyUSB 장치에 문제가 있다고 생각합니다. 다음과 같이 진행됩니다 :
저는 메인 ttyUSB fd의 읽기, 쓰기, 닫기 및 열기 프로세스 (popen과 함께)를 열어 각 ttyUSB를 처리합니다 (물론 fd가 닫힌 후에).
내가 'lsof | grep ttyUSB '는 주 프로세스에 의해 이미 닫혀 있더라도 하위 프로세스가 시작될 때 주 프로세스에서 열린 모든 fd가있는 것처럼 보입니다. (btw, fd는 주 프로세스와 관련이 없습니다)fd 중복 파이썬에서 자식 프로세스

정상입니까? (tinycore, kernal 2.6.33.3), 그것을 방지 할 수있는 방법이 있습니까?

감사합니다.

답변

0

기본적으로 프로세스가 fork/exec (popen() 동안 발생) 할 때 열려있는 파일 설명자는 하위 프로세스에 의해 상속됩니다. 원하는 결과가 아닌 경우, 분기 후 파일 설명자를 수동으로 닫거나 fcntl(fd, F_SETFD, FD_CLOEXEC)을 사용하여 fds를 close-on-exec로 설정해야합니다. (커널이 새로운 프로세스를 실행할 때 커널이 자동으로 파일 디스크립터를 닫도록합니다.)

+0

주 프로세스가 fd X를 열었고 close-on-exec 플래그가있는 다른 프로세스를 열면 주 프로세스 fd? – RoeeK

+0

나는 그것이 내가 원하는 정확하게하고 있다고 생각한다. 나는 그것에게 시험을 줄 것이다, 나는 나의 ttyUSB 문제를 일으킨다 고 확신한다. .. 고마워. – RoeeK

관련 문제