回答:
これは通常、プロセスがstdin
ストリームから読み取ろうとした場合に発生します。プロセスがバックグラウンドにある場合、プロセスはTTINシグナルを受信してフリーズします(STOPシグナルと同じ動作)。また、バックグラウンドプロセスが端末に書き込もうとしたときに、デュアルシグナルTTOUが発生します。
これをフォアグラウンドにすると、プロセスが再開され、端末から読み取ることができます。
デモ:
$ 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
これを回避する方法の1つはを使用するnohup
ことですが、プログラムが入力ストリームのリダイレクトに対処しない場合、これは奇妙な影響を与える可能性があり/dev/null
ます。