Esclarecimento sobre sinais (sighup), jobs e o terminal de controle

3

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

1) Algumas fontes on-line dizem que os sinais enviados do terminal de controle são SOMENTE enviados para o grupo de processos em primeiro plano. Isso significa que, se você quiser que um processo continue sendo executado em segundo plano quando fizer logout, basta suspender o trabalho (ctrl-Z) e retomá-lo no plano de fundo (bg). Em seguida, você pode efetuar logout e ele continuará a ser executado, pois SIGHUP é enviado somente para o trabalho em primeiro plano.

Veja: link

...In addition, if any signal-generating character is read by a terminal, it generates the appropriate signal to the foreground process group....

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

Por exemplo: link

...If I log out anyway, the shell sends my background job a HUP signal...

Em minhas próprias experiências com o Ubuntu Linux parece que 1) está correto. Eu executei um comando: "sleep 20 &" então desconectado, logado de volta e pressionado fez um "ps aux". Com certeza o comando sleep ainda estava funcionando.

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

    
por asolberg 12.11.2012 / 23:41

0 respostas

Tags