「<command>&disown」と「nohup <command>&disown」の違い


41

これは、の使用法に関する私の理解&disownあり、nohup次のとおりです。

  • <command>:ターミナルの現在のプロセス内で実行さbash、インスタンスをフォアグラウンドで(つまり、プロセスがと表示されているbashフォアグラウンドジョブやstdinstdoutstderrまだされている末端に結合); ハングアップの影響を受けません
  • <command> &:ターミナルの現在のプロセス内で実行さbash、インスタンスをバックグラウンドで(つまり、プロセスがと表示されているbashバックグラウンドジョブとstdinstdoutそしてstderrまだされている末端に結合); ハングアップの影響を受けません
  • <command> & disown:ターミナルの現在のプロセス内で実行さbash、インスタンスを背景に、そのプロセスがされてから切り離さbashさんのジョブのリスト(つまり、プロセスは次のようにリストされていないbashフォアグラウンド/バックグラウンドジョブとstdinstdoutそしてstderrまだされている末端に結合); ハングアップの影響を受けませ
  • nohup <command> & disown:ターミナルの現在の内のプロセスを実行しbash、例えば、バックグラウンドではなく、プロセスがされてから切り離さbashさんのジョブのリスト(つまり、プロセスは次のようにリストされていないbashフォアグラウンド/バックグラウンドジョブとstdinstdoutstderrされていない、まだ末端に結合) ; ハングアップの影響を受けませ

だから、nohup <command> & disownブロックstdinとリダイレクトstdoutを除いstderrnohup.out、デフォルトでは、と完全に同等と見なすことができるように思えます<command> & disown

上記はすべて正しいですか?誤解はありますか?


1
「ハングアップに対する免疫」と「ハングアップに対する免疫がない」とはどういう意味ですか?
カオス

2
私は親殺し/その終了を意味@chaos bashインスタンスはプロセスをkillしません
コス

回答:


32

あなたの理解は基本的に正しいです。との両方disownnohup使用すると、実行中のジョブを停止せずに実行中のシェルセッションを終了できます。いくつかの説明:

  • 実行する理由はありませんnohup command & disownnohupすでにあなたのためにそれを否認しますが。

  • nohupPOSIX定義されてdisown ますが、ではありません。多くのシェルは、(例えばながら、この手段があることbashzshksh)それを持って、他の人が(例えばtcshcshdash及びsh)それを持っています。

  • disownコマンドを起動したに使用できますが、nohup前に使用する必要があります。

私が知る限り、2つのコマンドの実際の効果は同じです。彼らはそれぞれ他にはないことを(参照機能を持っているhelp disownman nohup)が、その基本的な機能は、はい、同じです。

これらのツールとそれらの違いの詳細については、こちらの回答をご覧ください。


11
Nohupそして、disown同じものではありませんと一緒に両方のコマンドを使用すると、冗長性はありません。詳細な説明については、この回答を参照してください
メモ

7

あなたの第一から第三の点は大丈夫のように思えますstdin, stdout and stderr are still bound to the terminalが、正しい概念ではありません。stdinターミナルまたはターミナルを使用する方法を介してコマンドにファイル名を常に入力するという意味で、常にターミナルにバインドされます。stdout and stderr are still bound to the terminal大丈夫です。

あなたはstdin, stdout and stderr are not still bound to the terminal私の前の段落で述べたように正しくない4番目の点にあります。また、ここでは/dev/null、への入力ファイルとして使用しています。commandたとえば、コマンドcatが使用されている場合は、として使用していcat /dev/nullます。

あなたの第五ポイントのコマンドは正しく、あなたが使用置かれていないnohup <command> & disownのいずれかを使用している間、nohupまたはdisown他のいずれかが必要とされていません。それらの目的は同じですが(を無視するためSIGHUP)、少し異なる方法で機能します。したがって、コマンドはとして単純化できますnohup <command> &

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.