Perché i processi in background a volte si fermano spontaneamente?


10

A volte, qualche tempo dopo che ho eseguito il background di un processo con bgin bash, quando premo Invio nella stessa shell per visualizzare nuovamente il prompt (solo per verificare che io sia ancora in bash quando è stato visualizzato un output dal processo in background), il processo in background sembra fermarsi spontaneamente.

Se lo faccio di bgnuovo , si ripresenta lo stesso problema.

L'unico modo per risolverlo sembra essere fg.

Perché succede?


Dove sta andando la tua uscita? Stai riempiendo un buffer da qualche parte?
Paul Tomblin,

Risposte:


12

Questo di solito accade se il processo tenta di leggere dal suo stdinflusso. Quando il processo è in background, riceve un segnale TTIN ed è quindi congelato (stesso comportamento di un segnale STOP). C'è anche il doppio segnale TTOU quando un processo in background tenta di scrivere sul suo terminale.

Portandolo in primo piano riprende il processo e gli consente di leggere dal tuo terminale.

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

Uno dei modi per evitarlo è l'uso nohup, ma questo può avere strani effetti se il programma non ha a che fare con il reindirizzamento del flusso di input /dev/null.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.