nohup
ハングアップ信号をキャッチします (man 7 signal
を参照) ) アンパサンドはしません (シェルがそのように構成されているか、SIGHUP
を送信しない場合を除く)。
通常、&
を使用してコマンドを実行する場合 その後シェルを終了すると、シェルはハングアップ信号 (kill -SIGHUP <pid>
) でサブコマンドを終了します。 )。これは nohup
を使用して防ぐことができます 、シグナルをキャッチして無視するため、実際のアプリケーションには到達しません。
bash を使用している場合は、コマンド shopt | grep hupon
を使用できます シェルが子プロセスに SIGHUP を送信するかどうかを確認します。オフの場合、プロセスは終了しません。これは、あなたの場合のようです。 bash がアプリケーションを終了する方法の詳細については、こちらを参照してください。
nohup
の場合があります。 たとえば、開始したプロセスが SIGHUP
に再接続する場合など、機能しません
myprocess.out &
サブシェルを使用してバックグラウンドでプロセスを実行します。現在のシェルが (ログアウトなどによって) 終了すると、すべてのサブシェルも終了するため、バックグラウンド プロセスも終了します。 nohup コマンドは HUP
を無視します そのため、現在のシェルが終了した場合でも、サブシェルと myprocess.out
バックグラウンドで実行され続けます。もう 1 つの違いは、&
です。 単独では stdout/stderr をリダイレクトしないため、出力またはエラーがある場合、それらは端末に表示されます。一方、nohup は stdout/stderr を nohup.out
にリダイレクトします または $HOME/nohup.out
.
ほとんどの場合、ssh を使用してリモート サーバーにログインします。シェル スクリプトを開始してログアウトすると、プロセスが強制終了されます。Nohup は、シェルからログアウトした後もスクリプトをバックグラウンドで実行し続けるのに役立ちます。
Nohup command name &
eg: nohup sh script.sh &
Nohup は HUP シグナルをキャッチします。Nohup はジョブを自動的にバックグラウンドに置きません。 &
を使用して明示的に伝える必要があります