Enviar sinal SIGTERM para um processo rodando dentro do ssh

4

É possível enviar um sinal SIGTERM (ou outro) para um processo dentro do ssh, por exemplo:

ssh hostname 'sleep 10; echo done'

O que posso fazer para interromper o comando sleep? Se eu pressionar ctrl-c, o comando ssh será interrompido.

    
por jabalsad 25.01.2012 / 11:47

3 respostas

2

É possível propagar ctrl+c para o processo remoto implementando um conversor "EOF para SIGHUP" por meio de um pipe nomeado no host remoto (consulte: O comando ssh inesperadamente continua em outro sistema após o ssh terminar ).

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"
'
    
por 13.02.2014 / 19:04
0

Se você conhecesse o pid do processo remoto, você poderia fazer: ssh hostname 'kill -TERM $pid'

    
por 25.01.2012 / 11:54
0

-t pode fazer o que quiser (consulte link ). Infelizmente, se você quiser ler stdin também, você precisará fazer isso em duas etapas, tendo apenas Ctrl + C para o segundo, por exemplo,

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\""    
    
por 16.09.2013 / 10:08

Tags