バックグラウンドプロセスが時々突然停止するのはなぜですか?

バックグラウンドプロセスが時々突然停止するのはなぜですか?

時には、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

おすすめ記事