時には、bashを使用してプロセスをバックグラウンドに設定し、bg
同じシェルでEnterキーを押してプロンプトを再表示すると(バックグラウンドプロセスの一部の出力が表示されている間にまだbashにあることを確認するため)、バックグラウンドプロセスは自動的に停止しますそうです。
これをやり直すと、bg
同じ問題が再び発生します。
この問題を解決する唯一の方法はfg
。
なぜこれが起こるのですか?
答え1
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
。