É necessário rejeitar um processo para que ele continue funcionando após ser desconectado?

É necessário rejeitar um processo para que ele continue funcionando após ser desconectado?

Alguém poderia explicar se e por que disowné necessário se você deseja manter um trabalho em execução mesmo depois de desconectar.

Eu pergunto porque todos os sites que visitei dizem para usar disowne, bgpor bgsi só, estão funcionando para mim e não sei por quê.

É porque não entendi completamente para que disownserve ou há algumas configurações em algum lugar que estão afetando o comportamento padrão do bgcomando?

Aqui está o que eu fiz:

  • Conectado à minha caixa CentOS 6 via SSH
  • Criou um processo simples:

    tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
    
  • Suspendeu o trabalho

  • Retomei em segundo plano viabg 1
  • Desconectado do servidor SSH

Em seguida, verifiquei via FTP para ver se o .tar.gzarquivo ainda estava aumentando de tamanho e estava.

Responder1

Os processos em segundo plano bgou &normalmente morrerão em 2 cenários:

  1. O shell recebe um SIGHUP
  2. Eles tentam escrever em um terminal que não existe mais.

O item nº 1 é o principal culpado ao fechar seu terminal. No entanto, se isso acontece ou não dependecomovocê fecha seu terminal. Você pode fechá-lo:

  1. Algo como clicar no "X" no seu gerenciador de janelas
  2. Você pode digitar exit, logoutou CTRL+ D.

O item nº 1 é aquele que resultará no envio de um SIGHUP. # 2 não.

Resumindo a história, se você colocar em segundo plano um processo com bge depois sair com exit, logoutou CTRL+ D, o processo não será eliminado.

Responder2

Quando você fecha um terminal, todos os processos que utilizam este terminal (veja TTYa coluna na ps -elfsaída) recebem um arquivo SIGHUP. Cabe a processar o que fazer em SIGHUP. Em unixes clássicos (AIX, Solaris), os processos são fechados neste sinal. É por isso que você precisa usar disown. De man bash:

O shell é encerrado por padrão após o recebimento de um SIGHUP. Antes de sair, um shell interativo reenvia o SIGHUP para todos os trabalhos, em execução ou parados. Os trabalhos interrompidos recebem SIGCONT para garantir que recebam o SIGHUP. Para evitar que o shell envie o sinal para um trabalho específico, ele deve ser removido da tabela de trabalhos com o disown embutido (veja COMANDOS BUILTIN DO SHELL abaixo) ou marcado para não receber SIGHUP usando disown -h.

informação relacionada