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 ktservere, 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 killcomando (ad esempio, inviando SIGINT o SIGHUP), il ktserverprocesso rimane attivo .
Come posso rendere il ktservermorire sempre indipendente su come sshviene ucciso?
EDIT : Se, invece di ktservereseguire 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 ktservero 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> reade uccidendo il processo ssh in seguito. readera ancora vivo e vegeto.
ssh example.com dd ...completato i lavori anche poche ore dopo l' sshinterruzione della connessione a causa di problemi di rete. Se puoi modificare ktserverl'opzione per produrre qualcosa di tanto in tanto, questa potrebbe essere una soluzione alternativa.
readsul computer remoto e dopo aver ucciso la connessione SSH readnon 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?