を持ってきて、まだそのstdin
(またはstd::cin
)がその制御端末に関連付けられているために、実行された)には、SIGTTIN
シグナルが送信されます。このシグナルは、プログラムが完全に停止し、ユーザがフォアグラウンド(fg %job
または同様のもの)に持ってきて、実際にプログラムに入力できるようにするまで保留します。このように一時停止されているプログラムを避けるために、次のいずれかを実行します
- は、プログラム
stdin
チャネルは、もはやどちらかを入力するプログラムのための適切な内容のファイルにリダイレクトすることによって、端末に関連付けられている、ことを確認してください実際に入力が必要ない場合は/dev/null
に - 例えばmyprogram < /dev/null &
。
- プログラムの起動後に端末を終了すると、プログラムの
stdin
との関連付けが解除されます。しかし、これによりSIGHUP
がプログラムに渡されます(つまり、入出力チャネルに "ハングアップ"が発生したことを意味します)。これは通常、プログラムを終了させますが、これはnohup
を使用することで回避できます。 nohup myprogram &
。
このプログラムの出力をキャプチャすることに興味があれば、これはおそらく上記の両方の信号(およびその他の信号)の両方を防止し、出力を保存するための最良のオプションですプログラムの実行に問題がないかどうかを調べる:
nohup myprogram </dev/null> ${HOME}/myprogram.log 2>&1 &
これはどうやってバックグラウンドで正しく動作させるのですか?バックグラウンドでサーバアプリケーションを実行すると、ターミナルで私をブロックすることなく実際に動作するのですか? – user1255410
@ user1255410 [tmux](http://tmux.sourceforge.net/)または[screen](http://www.gnu.org/software/screen/)を検討してください。 – speakr
バックグラウンド・プロセスが実行中の端末からの読み取りを試みると、そのバックグラウンド・プロセスは停止し、フォアグラウンドで希望する入力を提供できるようになります。入力しない場合は、 'example dev/null&'を使用します。 – twalberg