2011-08-25 5 views
5

Come ci si assicura quando spawn un processo su una macchina remota usando Python Paramiko, che il processo morirà quando la connessione funzionerà?Come assicurarsi che tutti i processi spawnati muoiano quando uccido uno script Paramiko Python?

In particolare, il problema riscontrato è che eseguirò wget o qualche altro comando utilizzando Paramiko e si bloccherà. Sfortunatamente, quando uccido il processo di script Python direttamente, il processo sulla macchina remota non muore. Continua a funzionare e ho un altro processo di sospensione.

Devo uccidere direttamente il processo perché sto cercando di collegarlo a uno strumento che può solo uccidere i processi direttamente.

Ho sentito che questo può essere fatto in SSH rendendo SSH un "Terminale di controllo". C'è qualcosa in Paramiko che può fare questo, o semplicemente uccidere qualsiasi processo su una macchina remota dopo la sua spawn?

Grazie!

+0

quando si termina la connessione ssh, lo stdin del comando remoto raggiunge EOF. Non tutti i comandi verificano questa condizione e continuano a funzionare in questo caso. Sono sorpreso, tuttavia, che questo sia un problema per wget (a meno che non si scarichino file di grandi dimensioni). –

risposta

2

È necessario un psedo-tty allocato in modo che quando la connessione viene chiusa, SIGHUP venga inviato ai processi figli. I processi ben educati usciranno su SIGHUP. Vedere questa risposta sull'impostazione di una pseudo-tty: Paramiko and Pseudo-tty Allocation