Esta é uma pergunta que foi abordada várias vezes, não apenas aqui, mas também em outros sites da rede de troca de pilhas (por exemplo, como fazer o ssh matar o processo remoto quando eu interrompo o próprio ssh? ). No entanto, não posso fazer nenhuma das soluções funcionar para mim.
Estou executando um comando através do ssh. Sempre que eu sair do ssh, quero que o comando morra também. Este comando é um daemon chamado ktserver que é executado indefinidamente até você pressionar Ctrl-C.
Eu o executo da seguinte maneira: ssh -t compute-0-1 ktserver
e, de fato, quando pressiono Ctrl-C, o processo termina normalmente e a sessão ssh termina.
No entanto, se em vez de pressionar Ctrl-C, eu matar o processo ssh usando o kill
comando (por exemplo, enviando SIGINT ou SIGHUP), o ktserver
processo permanecerá ativo.
Como posso fazer o ktserver
sempre morrer independente de como ssh
é morto?
Edição : Se, em vez de ktserver
eu executar algo completamente diferente, como gedit
, tudo funciona como um encanto (ou seja, gedit morre quando a conexão morre). Portanto, pode haver algo errado com o próprio processo. Por exemplo, eu pensei que poderia estar ignorando SIGHUP ou SIGINT. No entanto, quando executo kill -1 ktserver
ou kill -2 ktserver
, o processo morre conforme o esperado.
EDIT2 : Como aponta Mark Plotnick, o problema está relacionado ao fato de não haver comunicação circulando no canal ssh. Confirmei executando ssh -t <host> read
e matando o processo ssh posteriormente. read
ainda estava vivo e chutando.
ssh example.com dd ...
trabalhos foram concluídos até horas depois que a ssh
conexão morreu devido a problemas de rede. Se você pode alterar ktserver
a opção de gerar algo de vez em quando, isso pode ser uma solução alternativa.
read
no computador remoto e, depois de matar a conexão ssh, read
não morreu. Infelizmente, não posso mudar o ktserver para produzir nada. Não há solução então?
shopt -s huponexit
) Você pode testar se isso funciona para você?
kill -9 ktserver
?