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 ktservere, 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 killcomando (por exemplo, enviando SIGINT ou SIGHUP), o ktserverprocesso permanecerá ativo.
Como posso fazer o ktserversempre morrer independente de como sshé morto?
Edição : Se, em vez de ktservereu 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 ktserverou 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> reade matando o processo ssh posteriormente. readainda estava vivo e chutando.
ssh example.com dd ...trabalhos foram concluídos até horas depois que a sshconexão morreu devido a problemas de rede. Se você pode alterar ktservera opção de gerar algo de vez em quando, isso pode ser uma solução alternativa.
readno computador remoto e, depois de matar a conexão ssh, readnã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?