ssh: propaga sinal para processo remoto

3

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.

Ole Tange
fonte
O que você quer dizer com "(sono 5; eco '^ C'; sono 5)"?
Raúl Salinas-Monteagudo
Aguarde 5 segundos. Envie Ctrl-C (caractere ASCII 3, digite Ctrl-V Ctrl-C no Bash). Aguarde 5 segundos.
precisa
Mas ecoar '^ C' não gera um sinal SIGINT. Você quer dizer que é um pseudocódigo para fazer isso manualmente?
Raúl Salinas-Monteagudo
11
Ele gera INT no controle remoto se você usar ssh -tt. Portanto, não: não é pseudocódigo. O exemplo acima com ^ C realmente funciona.
precisa
Observe que Ctrl-Z envia um SIGTSTP, não um SIGTERM. Mesmo se o Ctrl-Z estiver funcionando, você estará limitado a Ctrl-C, Ctrl- \ e Ctrl-Z , não a sinais arbitrários.
dimo414

Respostas:

0

Você realmente precisa de um tty?

Você poderia usar ssh server killall burnP6se 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:

ssh server daemon -n burnP6 -- /usr/bin/burnP6

Para pará-lo:

ssh server daemon --stop -n burnP6 
Raúl Salinas-Monteagudo
fonte
Eu não preciso de um pty, mas 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.
precisa