Não hangup signal por padrão [duplicate]

1

Eu tenho um servidor rodando o servidor Ubuntu. Está atrás de um proxy ... não sei se isso faz diferença. Mas eu descobri que alguns processos que eu tentei foram terminados quando eu me desconectei da sessão SSH. Por exemplo, eu tenho o servidor ipython notebook e os processos do servidor Mongod em execução nesse servidor. Sempre que eu efetuo logout, ambos os processos morrem mesmo que sejam executados em segundo plano com &

Eu descobri recentemente o comando nohud , que funciona fantasticamente. No entanto, porque é que eu não encontrei isso com a maioria dos servidores? Existe algum tipo de padrão no servidor unbuntu que mata todos os processos por um usuário quando eles desligar do SSH? Posso executar o nohud por padrão para todos os processos?

Obrigado

    
por jwillis0720 31.08.2014 / 07:50

1 resposta

4

Os processos do Ubuntu lidam com sinais da mesma forma que outras distribuições Linux e Unices fazem. Quando uma sessão SSH é desconectada, um sinal SIGHUP é enviado para o líder da sessão process , que provavelmente seria bash .

Bash, por sua vez, limpa depois de si :

The shell exits by default upon receipt of a SIGHUP. Before exiting, an interactive shell resends the SIGHUP to all jobs, running or stopped. Stopped jobs are sent SIGCONT to ensure that they receive the SIGHUP. To prevent the shell from sending the SIGHUP signal to a particular job, it should be removed from the jobs table with the disown builtin (see Job Control Builtins) or marked to not receive SIGHUP using disown -h.

If the huponexit shell option has been set with shopt (see The Shopt Builtin), Bash sends a SIGHUP to all jobs when an interactive login shell exits.

disown é um comando interno do Bash. nohup é um comando externo com efeito semelhante.

Eu não recomendo a reconfiguração do Bash para não matar todos os seus processos filhos (nem sei como fazer isso). Em vez disso, um objetivo melhor seria evitar que Bash morresse quando seu TTY desaparecesse. Você pode usar screen , tmux ou mosh para manter o Bash ativo.

    
por 31.08.2014 / 09:06