É necessário rejeitar um processo para continuar a execução após a desconexão?

2

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

Eu pergunto porque todos os sites que visitei dizem que usar disown e bg , mas bg por conta própria, está funcionando para mim e não sei por quê.

É porque eu não entendi completamente para que disown é ou existem algumas configurações em algum lugar que estão afetando o comportamento padrão do comando bg ?

Veja o que eu fiz:

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

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

  • Retomamos em segundo plano por meio de bg 1
  • Desconectado do servidor SSH

Eu verifiquei via FTP para ver se o arquivo .tar.gz ainda estava crescendo em tamanho e era.

    
por Not Available 20.06.2014 / 18:09

2 respostas

4

Os processos em segundo plano via bg ou & normalmente morrem em dois cenários:

  1. O shell recebe um SIGHUP
  2. Eles tentam gravar 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, depende de como você fecha o seu terminal. Você pode fechá-lo por:

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

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

Para encurtar a história, se você fizer um processo em segundo plano com bg e, em seguida, sair com exit , logout ou CTRL + D , o processo não será morto.

    
por 20.06.2014 / 19:08
1

Quando você fecha um terminal, todos os processos que usam esse terminal (consulte TTY column em ps -elf output) recebem um SIGHUP . Cabe processar o que fazer em SIGHUP . Nos unixes clássicos (AIX, Solaris), os processos são fechados neste sinal. É por isso que você precisa usar disown . De man bash :

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 signal to a particular job, it should be removed from the jobs table with the disown builtin (see SHELL BUILTIN COMMANDS below) or marked to not receive SIGHUP using disown -h.

    
por 20.06.2014 / 18:25

Tags