Esta es una pregunta que se ha abordado varias veces, no solo aquí, sino también en otros sitios de la red de intercambio de pila (por ejemplo, ¿Cómo hacer que ssh mate el proceso remoto cuando interrumpo ssh? ). Sin embargo, no puedo hacer que ninguna de las soluciones funcione para mí.
Estoy ejecutando un comando a través de ssh. Cada vez que salgo de ssh, quiero que el comando también muera. Este comando es un demonio llamado ktserver que se ejecuta indefinidamente hasta que presione Ctrl-C.
Lo ejecuto de la siguiente manera: ssh -t compute-0-1 ktservery, de hecho, cuando presiono Ctrl-C, el proceso finaliza con gracia y la sesión ssh finaliza.
Sin embargo, si en lugar de presionar Ctrl-C, elimino el proceso ssh usando el killcomando (por ejemplo, enviando SIGINT o SIGHUP), el ktserverproceso permanece vivo.
¿Cómo puedo hacer que el ktserversiempre muera independientemente de cómo sshse mata?
EDITAR : si, en lugar de ktserverejecutar algo completamente diferente, como gedit, todo funciona como un encanto (es decir, gedit muere cuando la conexión muere). Por lo tanto, puede haber algo mal con el proceso en sí. Por ejemplo, pensé que podría estar ignorando SIGHUP o SIGINT. Sin embargo, cuando ejecuto kill -1 ktservero kill -2 ktserver, el proceso muere como se esperaba.
EDIT2 : Como señala Mark Plotnick, el problema está relacionado con el hecho de que no hay comunicación circulando en el canal ssh. Lo he confirmado ejecutando ssh -t <host> ready matando el proceso ssh después. readseguía vivo y pateando.
ssh example.com dd ...completado los trabajos incluso horas después de que la sshconexión falle debido a problemas de red. Si puede modificar ktserverpara tomar una opción para generar algo de vez en cuando, eso puede ser una solución.
readen la computadora remota, y después de cerrar la conexión ssh, readno morí. Desafortunadamente, no puedo cambiar ktserver para generar nada. ¿No hay solución entonces?
shopt -s huponexit) ¿Puedes probar si esto funciona para ti?
kill -9 ktserver?