nohupと「>&nohup.out&」の違いは何ですか?


5

nohupは、シェルのSIGHUPの影響を受けないプロセスをレンダリングしますが、これをシェルから実行しても:

bash -c 'while true; do sleep 1; date; done' >& nohup.out &

その後、ログアウトして再度ログインすると、bashはまだ実行中で、nohup.outに出力を生成します。違いはありますか?リダイレクトのみに頼ると信頼性が低下しますか?


参考までに、一般に、これらの種類の質問は、おそらくserverfaultではるかに速く回答されます。
Mikeage

@Mikeage:それは、bashについてだからといって何ですか?
Hello71

これはかなりLinux固有であり(SFはLinuxユーザーの割合がSUよりも高い傾向があります)、これは管理者が日常的に行うことです。
Mikeage

回答:


5

bashでは、バックグラウンドジョブはnohupで保護する必要はありません

bashのバージョンに応じて、動作を変更できます。でSIGNALSのマニュアルページのセクション

shoptでhuponexitシェルオプションが設定されている場合、bashは対話型ログインシェルが終了するときにすべてのジョブにSIGHUPを送信します。

huponexitのにオプションのデフォルトはオフ


1

nohup実行をシェルから切断できます。

通常、バックグラウンドジョブは、リモートSSHセッションからログオフするときに終了しないようにするために使用されます。この状況でよく発生する別の問題は、sshがバックグラウンドジョブとの間でデータの損失を拒否するため、ログオフを拒否(「ハング」)することです。

この問題は、3つのI / Oストリームすべてをリダイレクトすることでも克服できます。
nohup ./myprogram > foo.out 2> foo.err < /dev/null &

SSHの「ハングアップ」ケースへの別の参照。


1
私が説明したように、リダイレクト(nohup なし)が同じことをしているように見えるので、これは私の質問には本当に答えません。
ヤン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.