¿Por qué los procesos en segundo plano a veces se detienen espontáneamente?

10

A veces, un tiempo después de haber realizado un proceso de fondo bgen bash, cuando presiono Enter en el mismo shell para volver a mostrar el mensaje (solo para verificar que todavía estoy en bash cuando se ha mostrado alguna salida del proceso en segundo plano), El proceso de fondo parece detenerse espontáneamente.

Si lo vuelvo a hacer, se bgrepite el mismo problema.

La única forma de solucionarlo parece ser fg.

¿Por qué pasó esto?

Robin Green
fuente
¿A dónde va tu producción? ¿Estás llenando un búfer en alguna parte?
Paul Tomblin

Respuestas:

12

Esto suele suceder si el proceso intenta leer de su stdinsecuencia. Cuando el proceso está en segundo plano, recibe una señal TTIN y, por lo tanto, se congela (el mismo comportamiento que una señal STOP). También existe la señal dual TTOU cuando un proceso en segundo plano intenta escribir en su terminal.

Llevarlo a primer plano reanuda el proceso y le permite leer desde su terminal.

Manifestación:

$ 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

Una de las formas de evitar esto es usarlo nohup, pero esto puede tener efectos extraños si el programa no trata de redireccionar su flujo de entrada /dev/null.

Estera
fuente