Nohup myprocess.out &
またはmyprocess.out &
のどちらも、myprocess.outをバックグラウンドで実行するように設定します。端末をシャットダウンした後、プロセスはまだ実行中です。それらの違いは何ですか?
Nohup
はハングアップシグナル(man 7 signal
を参照)を捕捉しますが、アンパーサンドは捕捉しません(Shellがそのように構成されているか、またはSIGHUP
をまったく送信しない場合を除く)。
通常、&
を使用してコマンドを実行し、その後シェルを終了すると、シェルはハングアップシグナル(kill -SIGHUP <pid>
)でサブコマンドを終了します。これはNohup
を使って防ぐことができます、なぜならそれは実際のアプリケーションに決して届かないようにシグナルをキャッチして無視するからです。
Bashを使用している場合は、シェルが子プロセスにSIGHUPを送信しているかどうかを調べるために、コマンドshopt | grep hupon
を使用できます。オフになっていると、プロセスが終了することはありません。これは、あなたに当てはまるようです。 bashがアプリケーションをどのように終了させるかについてのより多くの情報はここで見つけることができます。
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は自動的に仕事をバックグラウンドにしません。 &を使って明示的に伝える必要があります
アンパサンド(&)を使用すると、子プロセス(現在のbashセッションの子)でコマンドが実行されます。ただし、セッションを終了すると、すべての子プロセスは強制終了されます。
nohup +アンパサンド(&)を使用しても同じことができますが、セッションが終了したときに子プロセスの親が "1"に変更されるため、 "init"プロセスになります。
間違っていれば訂正してください
Nohup myprocess.out &
Nohupハングアップシグナルを捕捉します。これは端末が閉じたときにプロセスを送信することを意味します。
myprocess.out &
プロセスは実行できますが、端末が閉じられると停止します。
Nohup myprocess.out
ターミナルを閉じても実行できるプロセスですが、ターミナルでctrl
+ z
を押すことでプロセスを停止できます。 &
が存在する場合、Crt
+ z
は機能しません。
Nohupコマンドはシグナルマスキングユーティリティで、ハングアップシグナルを捕捉します。アンパサンドとしてはハングアップの信号が聞こえません。 &を使用してコマンドを実行してシェルを終了すると、シェルはハングアップシグナルでサブコマンドを終了します。 Nohupはシグナルを受け取るので、これを防ぐことができます。 Nohupコマンドは、カーネルによってプロセスに送信され、それらをブロックすることができるハングアップシグナルを受け入れます。 Nohupコマンドは、ユーザーが長時間実行中のアプリケーションのログアウトを開始したり、プロセスが開始されたウィンドウを閉じたい場合に役立ちます。これらのアクションはどちらも通常、アプリケーションにハングアップするようカーネルに促しますが、Nohupラッパーを使用するとプロセスを続行できます。アンパサンドを使用すると、現在のbashセッションの子プロセスとこの子プロセスでコマンドが実行されます。セッションを終了すると、そのプロセスのすべての子プロセスが強制終了されます。アンパーサンドは、アクティブシェルのジョブ制御に関連しています。これは、バックグラウンドでセッション内でプロセスを実行するのに役立ちます。