2013-07-12 10 views
21

私は現在、&記号のプロセスを実行しています。しかしバックグラウンドでのLinuxプロセス - ジョブで "停止"?

$ example & 

、(私は、Linuxの初心者です注意してください)私はかなりこのような第2のコマンドの後に、私は私のプロセスが停止信号を受信したノートを取得していますことに気づきました。私がしている場合

$ jobs 

私は少しのメモ "停止"で私の例のプロセスでリストを取得します。それは本当に停止され、バックグラウンドでは全く働いていないのですか?どのように正確に機能しますか?私はインターネットから混合情報を得ています。

答えて

1

はい、実際には停止し、バックグラウンドでは動作しなくなりました。それは、ウィンドウ別名(Linuxや他のUnixシステム、バックグラウンドで実行中のジョブでは、バック寿命タイプにfg job_number

+1

これはどうやってバックグラウンドで正しく動作させるのですか?バックグラウンドでサーバアプリケーションを実行すると、ターミナルで私をブロックすることなく実際に動作するのですか? – user1255410

+2

@ user1255410 [tmux](http://tmux.sourceforge.net/)または[screen](http://www.gnu.org/software/screen/)を検討してください。 – speakr

+6

バックグラウンド・プロセスが実行中の端末からの読み取りを試みると、そのバックグラウンド・プロセスは停止し、フォアグラウンドで希望する入力を提供できるようになります。入力しない場合は、 'example twalberg

54

を持ってきて、まだそのstdin(またはstd::cin)がその制御端末に関連付けられているために、実行された)には、SIGTTINシグナルが送信されます。このシグナルは、プログラムが完全に停止し、ユーザがフォアグラウンド(fg %jobまたは同様のもの)に持ってきて、実際にプログラムに入力できるようにするまで保留します。このように一時停止されているプログラムを避けるために、次のいずれかを実行します

  1. は、プログラムstdinチャネルは、もはやどちらかを入力するプログラムのための適切な内容のファイルにリダイレクトすることによって、端末に関連付けられている、ことを確認してください実際に入力が必要ない場合は/dev/nullに - 例えばmyprogram < /dev/null &
  2. プログラムの起動後に端末を終了すると、プログラムのstdinとの関連付けが解除されます。しかし、これによりSIGHUPがプログラムに渡されます(つまり、入出力チャネルに "ハングアップ"が発生したことを意味します)。これは通常、プログラムを終了させますが、これはnohupを使用することで回避できます。 nohup myprogram &

このプログラムの出力をキャプチャすることに興味があれば、これはおそらく上記の両方の信号(およびその他の信号)の両方を防止し、出力を保存するための最良のオプションですプログラムの実行に問題がないかどうかを調べる:

nohup myprogram </dev/null> ${HOME}/myprogram.log 2>&1 & 
関連する問題