![プログラムをバックグラウンドで実行しているときに、nohup と screen が機能しないのはなぜですか?](https://rvso.com/image/31668/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AB%E3%80%81nohup%20%E3%81%A8%20screen%20%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
理由はわかりませんが、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 モードでバックグラウンドで実行されているプログラムは、それを起動したターミナルを閉じても停止しません。