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.
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?
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.