Por que o kernel mata meu processo com o disown quando eu efetuo logout?

4

Eu gostaria de entender o comportamento de um processo em execução com o disown quando ocorre um SIGHUP (ou similar) de um logout do shell.

O processo simplesmente faz o seguinte:

  1. durma 15 segundos
  2. imprima "olá";
  3. cria um arquivo vazio em / tmp

Ok, nós executamos o processo e depois fazemos um ctrl-z, bg, desarquivamos e logout.

Após 15 segundos, o arquivo vazio em / tmp não existe. Se eu remover o segundo comando (print), o processo termina e o arquivo vazio existe, então se o processo envia algo para stdout sem um shell anexado, então recebe algum sinal do kernel que o mata.

O processo deve estar em Perl, PHP ou C (Com Bash ou Python parece que não ocorre)

Eu sei que uma execução em segundo plano com nohup envia a saída para um arquivo e não teremos esse problema, mas a questão é entender o comportamento do comando disown quando executamos o processo com alguma saída. (btw, disown com -h tem o mesmo resultado).

    
por Javier Tacón 26.11.2015 / 18:00

1 resposta

5

Seu processo morreu em SIGTTOU .

Se você quiser evitar que isso aconteça, você precisa ter cuidado para não imprimir algo no TTY que não é mais seu.

    
por 26.11.2015 / 18:14