いや
nohupは、HUP(ハングアップ)シグナルを無視するPOSIXコマンドです。 HUPシグナルは、慣例により、ターミナルがログアウトの依存プロセスに警告する方法です。
通常端末に出力される出力は、まだリダイレクトされていない場合はnohup.outというファイルに出力されます。
つかいます
以下のコマンドの最初は、バックグラウンドでプログラムabcdを起動し、その後のログアウトで停止しないようにします。
これらのメソッドは、プロセスがログアウト時に「停止」信号を送信することを防ぎますが、これらの標準I / Oファイル(stdin、stdout、またはstderr)の入力/出力を受信している場合、それらは引き続き端末をハングさせます。以下のぶら下がりの克服を参照してください。
nohupはしばしばniceコマンドと組み合わせて使用され、低い優先度でプロセスを実行します。
既存のジョブ、プロセス
一部のシェル(bashなど)は、noghupで開始されなかった場合でも、SIGHUPが既存のジョブに送信または伝播されるのを防ぐために使用できるシェル組み込み機能を提供します。 bashでは、これはdisown -h jobを使用して取得できます。引数なしで同じビルトインを使用すると、ジョブテーブルからジョブが削除されます。これは、ジョブがシグナルを受信しないことも意味します。アクティブなジョブでdisownを使用する前に、Ctrl-Zで停止し、bgコマンドでバックグラウンドで続行する必要があります。別の関連するbashオプションはshopt huponexitです。これは、シェルが正常に終了したときに自動的にHUPシグナルをジョブに送信します。
AIXおよびSolarisバージョンのnohupには、実行中のプロセスを変更して将来のSIGHUPシグナルを無視する-pオプションがあります。上記のbashのdisownビルトインとは異なり、nohup -pはプロセスIDを受け入れます。
吊り下げの克服
通常、バックグラウンド化されていないジョブは、リモートSSHセッションからログオフするときに終了しないようにするために使用されます。この状況でよく発生する別の問題は、sshがバックグラウンドジョブとの間でデータの損失を拒否するため、ログオフを拒否(「ハング」)することです。この問題は、3つのI / Oストリームすべてをリダイレクトすることでも克服できます。
また、SSHセッションを閉じると、常に依存するプロセスにHUPシグナルが送信されるわけではないことに注意してください。とりわけ、これは、擬似端末が割り当てられたかどうかに依存します。
代替案
- 端末マルチプレクサは、現在の端末から切り離された別のセッションでコマンドを実行できます。つまり、現在のセッションが終了しても、切り離されたセッションとそれに関連するプロセスは実行され続けます。その後、セッションに再接続できます。
- disownコマンドは、ジョブテーブルからジョブを削除したり、セッション終了時にSIGHUPシグナルが送信されないようにジョブをマークしたりするために使用されます。