Por que o ssh espera que todos os processos iniciados sejam encerrados?

1

Estou executando um script de uma máquina em outra máquina usando ssh.

ssh <host> a.pl

Agora, a.pl inicia várias outras instâncias de a.pl usando o método 'system' e executando cada uma delas em segundo plano. Eu tenho isso integrado com o LDAP e quando uma das instâncias morre, o script principal a.pl fica sabendo sobre isso, pois continua monitorando-os continuamente. Consequentemente, ao descobrir que uma das instâncias morreu, o script principal também morre e as instâncias restantes são propriedade do init (1).

Espero que o ssh saia quando esse script principal morrer. Mas, de alguma forma, parece que o ssh continua esperando por todos os processos que foram lançados. ssh sai quando mato as instâncias restantes.

Este é o comportamento esperado? Se sim, por que isso acontece?

    
por bpositive 28.07.2015 / 06:10

1 resposta

1

Sim. Esse é o comportamento esperado. Você não quer ter processos de usuários desconectados em seu sistema. Para este caso de uso, existem serviços.

Internamente, isso é basicamente causado pelo fato de que o ssh está aguardando o momento em que o processo executado fechará as alças de arquivo (stdin, stdout, stderr), que são redirecionadas para o cliente. Ao executar outros scripts, eles herdarão as mesmas alças de arquivos e, portanto, não serão completamente fechados antes que todos os filhos os fechem completamente.

    
por 28.07.2015 / 13:18