myprocess.out を両方nohup myprocess.out &
またはバックグラウンドで実行するように設定します。myprocess.out &
ターミナルをシャットダウンした後、プロセスはまだ実行中です。それらの違いは何ですか?
7 に答える
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
orにリダイレクトし$HOME/nohup.out
ます。
ほとんどの場合、ssh を使用してリモート サーバーにログインします。シェル スクリプトを開始してログアウトすると、プロセスが強制終了されます。Nohup は、シェルからログアウトした後もバックグラウンドでスクリプトを実行し続けるのに役立ちます。
Nohup command name &
eg: nohup sh script.sh &
Nohup は HUP シグナルをキャッチします。Nohup は、ジョブを自動的にバックグラウンドに置きません。& を使用して明示的に伝える必要があります
nohup コマンドは、シグナル マスキング ユーティリティであり、ハングアップ シグナルをキャッチします。アンパサンドはハングアップ信号をキャッチしません。& を使用してコマンドを実行し、シェルを終了すると、シェルはハングアップ信号でサブコマンドを終了します。これは、シグナルをキャッチする nohup を使用することで防ぐことができます。Nohup コマンドは、カーネルによってプロセスに送信される可能性のあるハングアップ シグナルを受け入れてブロックします。Nohup コマンドは、ユーザーが長時間実行されているアプリケーションのログアウトを開始したい場合、またはプロセスが開始されたウィンドウを閉じたい場合に役立ちます。これらのアクションのいずれも、通常、カーネルにアプリケーションのハングアップを促しますが、nohup ラッパーはプロセスの続行を許可します。アンパサンドを使用すると、現在の bash セッションの子プロセスとこの子プロセスでコマンドが実行されます。セッションを終了すると、そのプロセスのすべての子プロセスが強制終了されます。アンパサンドは、アクティブなシェルのジョブ制御に関連しています。これは、バックグラウンドでセッション内のプロセスを実行する場合に便利です。