Enviar señal SIGTERM a un proceso que se ejecuta dentro de ssh

Enviar señal SIGTERM a un proceso que se ejecuta dentro de ssh

¿Es posible enviar una señal SIGTERM (u otra) a un proceso dentro de ssh, por ejemplo:

ssh hostname 'sleep 10; echo done'

¿Qué puedo hacer para interrumpir el comando de suspensión? Si presiono Ctrl-c, el comando ssh se interrumpe.

Respuesta1

Es posible propagarse ctrl+cal proceso remoto implementando un convertidor "EOF a SIGHUP" a través de una canalización con nombre en el host remoto (consulte:El comando ssh continúa inesperadamente en otro sistema después de que finaliza ssh).

ssh localhost '
TUBE=/tmp/myfifo.fifo
rm -f "$TUBE"
mkfifo "$TUBE"
<"$TUBE" sleep 100 &  appPID=$!
dd of="$TUBE" bs=1 2>/dev/null
kill $appPID
#kill -TERM -- -$$  # kill entire process group
rm -f "$TUBE"
'

Respuesta2

-Tal vez hagas lo que quieras (verhttps://superuser.com/a/20708/36198). Desafortunadamente, si también desea leer stdin, deberá hacerlo en dos pasos, solo presionando Ctrl+C para el segundo, por ejemplo

tmp=$(bzcat foo.bz2 | ssh $user@$host '
    t=$(mktemp -t foo.XXXXXXXXXXX);
    cat >"$t";
    echo "$t";
')
ssh -t $user@$host "./cmd \"$tmp\""
ssh $user@$host "rm -f \"$tmp\""    

Respuesta3

Si conocieras el pid del proceso remoto entonces podrías hacer:ssh hostname 'kill -TERM $pid'

información relacionada