2012-10-18 5 views
5

Sto provando a fork() ed exec() un nuovo processo di script python da un'app di Django in esecuzione in apache2/WSGI Python. Il nuovo processo Python viene demonizzato in modo tale da non mantenere alcuna associazione con apache2, ma so che le porte HTTP sono ancora aperte. Il nuovo processo uccide apache2, ma come risultato il nuovo processo Python ora tiene aperte le porte 80 e 443, e non lo voglio.Chiudi porta TCP 80 e 443 dopo la foratura in Django

Come si chiude la porta 80 e 443 dal nuovo processo Python? C'è un modo per ottenere l'accesso ai descrittori degli handle di socket in modo che possano essere chiusi?

risposta

2

Se si utilizza il modulo subprocess per eseguire lo script, l'argomento close_fds al costruttore Popen probabilmente fare quello che vuoi:

Se close_fds è vero, tutti i descrittori di file, tranne 0, 1 e 2 saranno essere chiuso prima che il processo figlio venga eseguito.

ammesso che non sono stati semplicemente chiusi, i primi tre descrittori di file sono tradizionalmente stdin, stdout e stderr, così le prese di ascolto nell'applicazione Django saranno tra quelle chiuse nel processo figlio.

+0

subprocess.Popen (myProcArgs, close_fds = True, ...) ha funzionato perfettamente. Grazie molto. – caelumvox