プログラムをバックグラウンドで実行しているときに、nohup と screen が機能しないのはなぜですか?

プログラムをバックグラウンドで実行しているときに、nohup と screen が機能しないのはなぜですか?

理由はわかりませんが、screenサーバー上で実行中のコマンドが勝手に停止します。そのため、nohup次の例を使用しようとしました。

nohup bzcat a.bz

しかし、走っているnohup

nohup: ignoring input and appending output to `nohup.out'

また、再開するには、次を実行します:fgこれにより、次のようになります:

-bash: fg: current: no such job

答え1

からのメッセージはnohupまったく問題ありません。これは単に、何を実行しているかを説明しているだけです。nohup でプログラムを実行すると、ターミナルに入力した内容は使用されなくなり、ターミナルに何も出力されなくなります。は、nohupプログラムの出力を というファイルにリダイレクトしますnohup.out

また、プログラムをバックグラウンドで実行することとは非常に異なりますnohup(バックグラウンドで実行することはbzcat a.bz &)。プログラムをバックグラウンドで実行すると、ターミナルからの入力は無視されます (ターミナルに入力した内容を使用できるのはフォアグラウンドで実行されているプログラムのみで、実際に対話しているのはフォアグラウンド プロセスであるため、「フォアグラウンド」プロセスと呼ばれます)。ただし、ターミナルに出力します。プログラムは、nohup モードでもバックグラウンドでも実行できます。実際、通常はそのようにnohup使用されます。nohupプログラムを実行してもバックグラウンドで起動しない場合は、実際にはバックグラウンドではないため、呼び出すことはできませんfg。ターミナルに出力しないだけです。

nohupシグナルを無視するモードでプログラムを実行できますHUP。ターミナルは通常、HUPターミナルを閉じるときにシグナルを送信します。そのため、nohup モードでバックグラウンドで実行されているプログラムは、それを起動したターミナルを閉じても停止しません。

関連情報