285

myprocess.out を両方nohup myprocess.out &またはバックグラウンドで実行するように設定します。myprocess.out &ターミナルをシャットダウンした後、プロセスはまだ実行中です。それらの違いは何ですか?

4

7 に答える 7

366

nohupman 7 signalアンパサンドはキャッチしませんが (シェルがそのように構成されているか、まったく送信しない場合を除きSIGHUPます)。

通常、シェルを使用してコマンドを実行し、&後でシェルを終了すると、シェルはサブコマンドをハングアップ シグナル ( kill -SIGHUP <pid>) で終了します。nohupこれは、シグナルをキャッチして無視し、実際のアプリケーションに届かないようにするため、 を使用して防ぐことができます。

bash を使用している場合は、このコマンドshopt | grep huponを使用して、シェルが子プロセスに SIGHUP を送信するかどうかを確認できます。オフの場合、プロセスは終了しません。これは、あなたの場合のようです。bash がアプリケーションを終了する方法の詳細については、こちらを参照してください

ここの場合のように、開始したプロセスがシグナルをnohup再接続する場合など、機能しない場合がありますSIGHUP

于 2013-03-24T05:04:20.617 に答える
63

myprocess.out &サブシェルを使用してバックグラウンドでプロセスを実行します。現在のシェルが (ログアウトなどによって) 終了すると、すべてのサブシェルも終了するため、バックグラウンド プロセスも終了します。nohupコマンドはシグナルを無視するためHUP、現在のシェルが終了してもサブシェルmyprocess.outはバックグラウンドで実行され続けます。もう 1 つの違いは、&単独では stdout/stderr をリダイレクトしないため、出力またはエラーがある場合、それらは端末に表示されることです。一方、nohup は stdout/stderr をnohup.outorにリダイレクトし$HOME/nohup.outます。

于 2013-03-24T05:12:21.437 に答える
47

ほとんどの場合、ssh を使用してリモート サーバーにログインします。シェル スクリプトを開始してログアウトすると、プロセスが強制終了されます。Nohup は、シェルからログアウトした後もバックグラウンドでスクリプトを実行し続けるのに役立ちます。

Nohup command name &
eg: nohup sh script.sh &

Nohup は HUP シグナルをキャッチします。Nohup は、ジョブを自動的にバックグラウンドに置きません。& を使用して明示的に伝える必要があります

于 2014-01-07T07:48:54.847 に答える
3

nohup コマンドは、シグナル マスキング ユーティリティであり、ハングアップ シグナルをキャッチします。アンパサンドはハングアップ信号をキャッチしません。& を使用してコマンドを実行し、シェルを終了すると、シェルはハングアップ信号でサブコマンドを終了します。これは、シグナルをキャッチする nohup を使用することで防ぐことができます。Nohup コマンドは、カーネルによってプロセスに送信される可能性のあるハングアップ シグナルを受け入れてブロックします。Nohup コマンドは、ユーザーが長時間実行されているアプリケーションのログアウトを開始したい場合、またはプロセスが開始されたウィンドウを閉じたい場合に役立ちます。これらのアクションのいずれも、通常、カーネルにアプリケーションのハングアップを促しますが、nohup ラッパーはプロセスの続行を許可します。アンパサンドを使用すると、現在の bash セッションの子プロセスとこの子プロセスでコマンドが実行されます。セッションを終了すると、そのプロセスのすべての子プロセスが強制終了されます。アンパサンドは、アクティブなシェルのジョブ制御に関連しています。これは、バックグラウンドでセッション内のプロセスを実行する場合に便利です。

于 2015-12-20T18:10:04.720 に答える