2012-10-18 6 views
5

Próbuję fork() i exec() nowy proces skryptowy Pythona z aplikacji Django, która działa w apache2/WSGI Python. Nowy proces Pythona jest demonfigurowany, więc nie ma żadnego powiązania z Apache2, ale wiem, że porty HTTP są nadal otwarte. Nowy proces zabija Apache2, ale w rezultacie nowy proces Pythona ma teraz otwarte port 80 i 443, a ja tego nie chcę.Zamknij port TCP 80 i 443 po rozwidleniu w Django

Jak zamknąć port 80 i 443 w ramach nowego procesu Pythona? Czy istnieje sposób uzyskania dostępu do deskryptorów uchwytów gniazd, aby można je było zamknąć?

Odpowiedz

2

Jeśli używasz modułu subprocess wykonać skrypcie close_fds argument konstruktora Popen prawdopodobnie będzie robić to, co chcesz:

Jeśli close_fds jest prawdą, wszystkie deskryptory plików z wyjątkiem 0, 1 i 2 będzie być zamknięte przed wykonaniem procesu potomnego.

zakładając, że nie zostały po prostu zamknięte, pierwsze trzy deskryptory plików są tradycyjnie stdin, stdout i stderr, więc gniazda słuchania w aplikacji Django będzie wśród tych zamkniętych w procesie potomnym.

+0

subprocess.Popen (myProcArgs, close_fds = True, ...) działało idealnie. Wielkie dzięki. – caelumvox