Por que os processos em segundo plano às vezes param espontaneamente?

9

Às vezes, algum tempo depois de ter passado por um processo com bg no bash, quando pressiono Enter no mesmo shell para exibir novamente o prompt (apenas para verificar se ainda estou no bash quando alguma saída do plano de fundo processo foi exibido), o processo de segundo plano parece parar espontaneamente.

Se eu voltar a bg , o mesmo problema se repete.

A única maneira de corrigir isso parece ser fg .

Por que isso acontece?

    
por Robin Green 20.11.2011 / 16:37

1 resposta

11

Isso geralmente acontece se o processo tentar ler seu fluxo stdin . Quando o processo está em segundo plano, ele recebe um sinal TTIN e, portanto, é congelado (mesmo comportamento de um sinal STOP). Há também o sinal duplo TTOU quando um processo em segundo plano tenta gravar em seu terminal.

Trazê-lo para o primeiro plano, retoma o processo e permite que ele leia a partir do seu terminal.

Demo:

$ cat t.sh
#! /bin/sh
sleep 1
read dummy
$ ./t.sh &
[1] 3364
$ 
[1]+  Stopped                 ./t.sh
$ ps aux|grep t.sh
me  3364  0.0  0.0  11268  1200 pts/0    T    17:04   0:00 /bin/sh ./t.sh

Uma das formas de evitar isso é usar nohup , mas isso pode ter efeitos estranhos se o programa não lida com o fluxo de entrada redirecionado para /dev/null .

    
por 20.11.2011 / 17:09