2011-09-19 46 views
0

我想我有一個ttyUSB設備的問題,導致從不同進程同時打開2個ttyUSB fd。 它是這樣的:
我有一個主要的python進程,它打開幾個ttyUSB fd,讀,寫,關閉和打開進程(用popen)來處理每個ttyUSB(當然在關閉fd之後)。
當我做'lsof | grep ttyUSB'看起來好像在子進程啓動時在主進程中打開的所有fd都與子進程相關聯,即使它們已經被主進程關閉了。 (順便說一下,該FD不關聯到主進程)fd從python複製到子進程

是行爲正常嗎? (tinycore,kernal 2.6.33.3),我有辦法阻止它嗎?

謝謝。

回答

0

默認情況下,進程在fork/exec時發生的任何文件描述符(發生在popen()期間)都由子進程繼承。如果這不是您希望發生的情況,則需要在分叉後手動關閉文件描述符,或者使用fcntl(fd, F_SETFD, FD_CLOEXEC)將fds設置爲關閉執行。 (這會使內核在執行新進程時自動關閉文件描述符。)

+0

所以如果主進程已經打開了fd X,並且它打開了另一個具有close-on-exec標誌的進程,它是否也會影響主要過程fd? – RoeeK

+0

以及我認爲它正在做我想要的。我會給它一個測試,我敢肯定,造成我的ttyUSB問題..謝謝 – RoeeK