Linux およびその他の Unix システムでは、バックグラウンドで実行されているが、そのstdin
(またはstd::cin
) 制御端末 (ジョブが実行されたウィンドウとも呼ばれる) に関連付けられているジョブには、SIGTTIN
シグナルが送信されます。完全に停止し、ユーザーがそれをフォアグラウンド (fg %job
または同様のもの) に移動して、実際にプログラムに入力を与えることができるようにします。このようにプログラムが一時停止するのを避けるには、次のいずれかを実行できます。
- プログラムが入力する適切なコンテンツを含むファイルにリダイレクトするか、実際に入力が必要ない場合は、プログラム
stdin
チャネルが端末に関連付けられていないことを確認します。/dev/null
myprogram < /dev/null &
- プログラムの起動後にターミナルを終了します。これにより、プログラムとの関連付け
stdin
がなくなります。ただし、これSIGHUP
によりプログラムに a が配信されます (入出力チャネルで「ハングアップ」が発生したことを意味します)。これにより、通常はプログラムが終了しますが、これは、nohup
たとえばを使用することで回避できますnohup myprogram &
。
プログラムの出力をキャプチャすることに興味がある場合は、おそらくこれが最良のオプションです。これは、上記の両方の信号 (および他のいくつかの信号) を防ぎ、出力を保存して、プログラムの実行に問題があります:
nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 &