Esclarecimento sobre sinais (sighup), trabalhos e terminal de controle

Esclarecimento sobre sinais (sighup), trabalhos e terminal de controle

Então, li duas perspectivas diferentes e estou tentando descobrir qual delas está certa.

1) Algumas fontes online dizem que os sinais enviados do terminal de controle são enviados SOMENTE para o grupo de processos em primeiro plano. Isso significa que se quiser que um processo continue rodando em segundo plano quando você sair, basta simplesmente suspender o trabalho (ctrl-Z) e retomá-lo em segundo plano (bg). Então você pode sair e ele continuará em execução porque o SIGHUP é enviado apenas para o trabalho em primeiro plano.

Ver:http://blog.nelhage.com/2010/01/a-brief-introduction-to-termios-signaling-and-job-control/

...Além disso, se qualquer caractere gerador de sinal for lido por um terminal, ele gera o sinal apropriado para o grupo de processos de primeiro plano....

2) Outras fontes afirmam que você precisa usar o comando "nohup" no momento em que o programa é executado ou, na sua falta, emitir um comando "disown" durante a execução para removê-lo da tabela de empregos que escuta SIGHUP. Eles dizem que se você não fizer isso ao sair, seu processo também será encerrado, mesmo que esteja sendo executado em um grupo de processos em segundo plano.

Por exemplo:http://docstore.mik.ua/orelly/unix3/upt/ch23_11.htm

...Se eu sair de qualquer maneira, o shell enviará ao meu trabalho em segundo plano um sinal HUP...

Em meus próprios experimentos com o Ubuntu Linux, parece que 1) está correto. Executei um comando: "sleep 20 &" então desconectei, loguei novamente e pressionei "ps aux". Com certeza, o comando sleep ainda estava em execução.

Então por que tantas pessoas parecem acreditar no número 2? E se tudo o que você precisa fazer é colocar um trabalho em segundo plano para mantê-lo funcionando, por que tantas pessoas usam “nohup” e “rejeitar”?

informação relacionada