Processo em segundo plano e SIGHUP

1

Meu entendimento é que um programa que está associado a um terminal BASH receberá o sinal SIGHUP se esse terminal estiver fechado. Isso geralmente terminará o programa.

Também sei que você pode usar o comando nohup juntamente com o símbolo & para executar o programa em segundo plano e desassociá-lo do terminal para que o programa não seja encerrado quando o terminal fechar (no log fora.)

No entanto, suponha que um programa seja executado normalmente sem nohup , mas seja suspenso usando Cntl-Z. Se o programa for retomado em segundo plano usando o comando bg , ele receberá o sinal SIGHUP no logout?

Ou para colocar de outra forma: se eu tenho um programa que já está em execução, e não quero pará-lo, mas gostaria de sair, posso suspendê-lo usando Cntl-Z e executá-lo em segundo plano usando bg ? Ou o programa será encerrado quando eu sair?

    
por Charles Salvia 08.01.2011 / 00:32

2 respostas

2

Você pode usar o comando disown se estiver usando o Bash.

De man bash :

If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP.

    
por 08.01.2011 / 00:44
1

Como Dennis diz, no bash você pode usar o disown para fazer o trabalho não obter SIGHUP quando você fechar o bash. BTW: você também pode obter o comportamento 'não enviar SIGHUP' se você executá-lo com setsid não apenas nohup . setsid tem a vantagem de não mexer com stdout e stderr como nohup faz.

Algumas pequenas limpezas de sua pergunta:

My understanding is that a program that is associated with a BASH terminal

Não apenas bash, mas ksh e zsh matam processos filhos com SIGHUP quando os shells também são fechados. É bastante normal em shells. Estou com preguiça de fazer uma pesquisa real e dizer "tudo", mas estou seguro em assumir que todos eles fazem isso.

BASH terminal

Não é um terminal bash, mas um shell bash. O terminal, bem emulador de terminal, é a janela. Bash shell é executado dentro dele.

will receive the SIGHUP signal if that terminal is closed. This usually will terminate the program.

Sim, por padrão, você será encerrado se receber SIGHUP. Qualquer aplicativo pode optar por ignorar isso (então nada acontece) ou pode pegar o sinal e fazer algo - registrá-lo, limpar, o que for. Processos de daemon, como servidores da Web, geralmente captam isso e o usam como um indicador para reler os arquivos de configuração.

    
por 08.01.2011 / 01:24