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


10

Às vezes, algum tempo depois de ter passado um processo bgem segundo plano 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 processo em segundo plano foi exibida), o processo em segundo plano parece parar espontaneamente.

Se eu fizer bgnovamente, o mesmo problema se repete.

A única maneira de corrigi-lo parece ser fg.

Por que isso acontece?


Para onde está indo sua saída? Você está preenchendo um buffer em algum lugar?
Paul Tomblin

Respostas:


12

Isso geralmente acontece se o processo tentar ler seu stdinfluxo. Quando o processo está em segundo plano, ele recebe um sinal TTIN e, portanto, é congelado (o 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 a leitura no 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 maneiras de evitar isso é usar nohup, mas isso pode ter efeitos estranhos se o programa não lidar com o redirecionamento do fluxo de entrada /dev/null.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.