2012-05-17 1 views
0

Я хочу, чтобы патч python popen2, который пытается закрыть все открытые filehandres, имея петлю на [3, SC_OPEN_MAX].Как обнаружить все обработчики файлов, которые открыты для закрытия?

Это означает, что если кто-то увеличивает верхний предел с помощью ulimit до огромного значения, такого как 1,000,000, он сделает любое приложение python, которое использует popen для эффективного блокирования.

Кто имеет такой вопрос: как вы можете получить список открытых обработчиков файлов вашего процесса. Решение должно работать как минимум на Linux и Windows.

Примечание: это для повторной фиксации http://bugs.python.org/issue1663329

ответ

1

Ваш подход не будет работать на окнах. На самом деле окна даже не имеют перечислимых дескрипторов файлов. Ваш подход к петле часто использовался в циклах выборочного опроса Unix, но он терпел неудачу в Windows, потому что дескрипторы сокета часто были> 0x80000000.

Но также, если я правильно помню, дескрипторы файлов закрыты по умолчанию вызовом exec в linux, и я думаю, что что-то подобное произойдет в окнах. Вам нужно было бы прямо спросить, чтобы получить дескриптор, который остается открытым через exec.

UPDATE:

это может представлять интерес http://bugs.python.org/issue1663329

Также только теперь я заметил, что вы говорите о popen2 - если питон достаточно новый вы действительно должны использовать subprocess вместо

Смежные вопросы