Esta é a versão geral de: Enviar sinal SIGTERM para um processo em execução no ssh
É possível enviar Ctrl-C para o processo remoto se o processo obtiver um pty (-tt):
# Runs for 5 seconds
(sleep 5; echo '^C'; sleep 5) | time ssh -tt localhost burnP6
Eu esperava que o mesmo funcionasse para Ctrl-Z, mas, infelizmente, não:
# Continues to run - does not suspend
(sleep 5; echo '^Z'; sleep 5) | time ssh -tt localhost burnP6
Se eu receber uma sessão interativa, Ctrl-C e Ctrl-Z funcionam bem.
Existe uma maneira de enviar outros sinais (estou especialmente interessado em Ctrl-Z)?
Não consigo usar o "ssh hostname 'kill -TERM $ pid'" sugerido, pois não conheço os pids no sistema remoto.
Respostas:
Você realmente precisa de um tty?
Você poderia usar
ssh server killall burnP6
se houver apenas um processo com esse nome.Ou você pode, de alguma forma, escrever o IP do seu processo em um arquivo e então usar algo como `ssh server kill $ (cat /tmp/burnP6.pid)".
Ou uma implementação mais simples e mais robusta seria usar o daemon de pacotes , destinado a daemonizar programas que não seriam daemon. Ele permite que você grave automaticamente o PID do seu daemon em um arquivo e o mate facilmente. Pode até reiniciar seu processo, caso ele morra.
Para iniciá-lo:
Para pará-lo:
fonte
burnP6
é apenas um exemplo. O comando pode ser:echo fyrrc 10 | rot13 | bash
. Em outras palavras, você não tem idéia do que será a execução do comando, e outros processos podem executar comandos com o mesmo nome (e estes não devem ser afetados), para que sua solução não dependa de saber qual comando será executado. Também é inaceitável ter que digitar um comando: Sua solução deve ser ativada por Ctrl-C e Ctrl-Z.