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 ktserver
y, 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 kill
comando (por ejemplo, enviando SIGINT o SIGHUP), el ktserver
proceso permanece vivo.
¿Cómo puedo hacer que el ktserver
siempre muera independientemente de cómo ssh
se mata?
EDITAR : si, en lugar de ktserver
ejecutar 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 ktserver
o 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> read
y matando el proceso ssh después. read
seguía vivo y pateando.
ssh example.com dd ...
completado los trabajos incluso horas después de que la ssh
conexión falle debido a problemas de red. Si puede modificar ktserver
para tomar una opción para generar algo de vez en cuando, eso puede ser una solución.
read
en la computadora remota, y después de cerrar la conexión ssh, read
no 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
?