Questa è una domanda che è stata affrontata più volte, non solo qui, ma anche in altri siti della rete di scambio di stack (ad esempio come fare in modo che ssh uccida il processo remoto quando interrompo ssh stesso? ). Tuttavia, non posso far funzionare nessuna delle soluzioni per me.
Sto eseguendo un comando tramite ssh. Ogni volta che esco da ssh, voglio che anche il comando muoia. Questo comando è un demone chiamato ktserver che gira indefinitamente finché non premi Ctrl-C.
Lo eseguo come segue: ssh -t compute-0-1 ktserver
e, in effetti, quando premo Ctrl-C, il processo termina con grazia e termina la sessione ssh.
Tuttavia, se invece di premere Ctrl-C, uccido il processo ssh usando il kill
comando (ad esempio, inviando SIGINT o SIGHUP), il ktserver
processo rimane attivo .
Come posso rendere il ktserver
morire sempre indipendente su come ssh
viene ucciso?
EDIT : Se, invece di ktserver
eseguire qualcosa di completamente diverso, come gedit
, tutto funziona come un incantesimo (cioè gedit muore quando la connessione si interrompe). Pertanto, potrebbe esserci qualcosa di sbagliato nel processo stesso. Ad esempio, ho pensato che potrebbe ignorare SIGHUP o SIGINT. Tuttavia, quando eseguo kill -1 ktserver
o kill -2 ktserver
, il processo termina come previsto.
EDIT2 : Come sottolinea Mark Plotnick, il problema è legato al fatto che non vi sono comunicazioni in circolazione sul canale ssh. Ho confermato eseguendo ssh -t <host> read
e uccidendo il processo ssh in seguito. read
era ancora vivo e vegeto.
ssh example.com dd ...
completato i lavori anche poche ore dopo l' ssh
interruzione della connessione a causa di problemi di rete. Se puoi modificare ktserver
l'opzione per produrre qualcosa di tanto in tanto, questa potrebbe essere una soluzione alternativa.
read
sul computer remoto e dopo aver ucciso la connessione SSH read
non sono morto. Sfortunatamente, non riesco a cambiare ktserver per produrre nulla. Allora non c'è soluzione?
shopt -s huponexit
). Puoi provare se questo funziona per te?
kill -9 ktserver
?