Quiero comenzar un par de trabajos en diferentes máquinas usando ssh. Si el usuario interrumpe la secuencia de comandos principal, quiero cerrar todos los trabajos correctamente.Iniciar un proceso en ssh usando bash y luego matarlo en sigint
Aquí es un breve ejemplo de lo que estoy tratando de hacer:
#!/bin/bash
trap "aborted" SIGINT SIGTERM
aborted() {
kill -SIGTERM $bash2_pid
exit
}
ssh -t remote_machine /foo/bar.sh &
bash2_pid=$!
wait
Sin embargo, el proceso de bar.sh sigue en funcionamiento la máquina remota. Si hago los mismos comandos en una ventana de terminal, se cierra el proceso en el host remoto.
¿Hay alguna manera fácil de que esto suceda cuando ejecuto el script bash? ¿O necesito hacerlo para iniciar sesión en la máquina remota, encontrar el proceso correcto y matarlo de esa manera?
edición: Parece que tengo que ir con la opción B, matando al remotescript a través de otra conexión ssh
Así que no quiero saber cómo puedo obtener el remotepid? He probado algo en la línea de:
remote_pid=$(ssh remote_machine '{ /foo/bar.sh & } ; echo $!')
Esto no funciona ya que bloquea.
¿Cómo espero a que se imprima una variable y luego "libere" un subproceso?
¿Has probado una trampa en tu script remoto? Tal vez SIGHUP? –
He tratado de atrapar todas las señales que puedo pensar sin ningún éxito ... Supongo que tendré que volver a conectarme a la máquina remota y ejecutar kill en la secuencia de comandos, pero entonces necesito el pid de el proceso remoto ... – getekha
Prueba 'pkill' si esa es la forma en que vas a ir. Crudo pero usualmente efectivo. – bstpierre