回答:
魚と自転車のどちらがいいですか?nohup
そして、exec
異なることを行います。
exec
シェルを別のプログラムに置き換えます。使い方exec
:シンプルなバックグラウンドジョブでは有用ではありませんexec myprogram; more stuff
でシェルを置き換えるmyprogram
実行されませんのでとmore stuff
は異なり、myprogram; more stuff
どの実行しmore stuff
たときにmyprogram
終了します。しかし、exec myprogram & more stuff
開始しmyprogram
、バックグラウンドで実行され、その後more stuff
、ちょうど好きmyprogram & more stuff
。
nohup
SIGHUPシグナルを無視して、特定のプログラムを実行します。端末が閉じられると、カーネルはその端末(シェル)の制御プロセスにSIGHUPを送信します。シェルは、バックグラウンドで実行されているすべてのジョブにSIGHUPを送信します。でジョブを実行するとnohup
、端末が死んだ場合(たとえば、リモートでログインして接続が切断された場合、または端末エミュレーターを閉じた場合)、この方法でジョブが強制終了されなくなります。
nohup
また、プログラムの出力をfileにリダイレクトしますnohup.out
。これにより、出力またはエラー出力に書き込めないため、プログラムが停止するのを防ぎます。nohup
入力をリダイレクトしないことに注意してください。起動した端末からプログラムを完全に切断するには、次を使用します。
nohup myprogram </dev/null >myprogram.log 2>&1 &
exec firefox
、シェルは実行されなくなりましたfirefox
。シェルはに置き換えられました。exec
プログラムの終了と新しいプログラムの開始を組み合わせて、同じプロセスIDを維持すると考えることができます。停止するように指示されたものがないため、端末は実行を続けます。後でFirefoxをfirefox
終了すると、プロセスは終了します。端末は、その子プロセスが終了したことに気づくため、順番に終了します。
exec &
=>プロセスをバックグラウンドプロセスとして実行するため、他のジョブに同じ端末を引き続き使用できます。
nohup
=>すべてのSIGHUP(シグナルの終了)を回避し、端末が閉じられていても実行を継続します。
exec
プロセスは、ときに死亡SIGHUP
受信されるが、nohup
プロセスは継続します。
exec
は実行中のプロセスを置き換えますが&
、exec'dコマンドをバックグラウンドで使用する場合は発生しないようです。bashでもzshでもない。
exec smth &
、と同じになり(exec smth) &
ますか?
(exec smth) &
ます。しかし、私はそれが同じであることを期待しません-私はそれが構文エラーであると期待します、どのようにプロセスを実行して(自分自身を置き換えて)、exec'dプロセスをバックグラウンドにできますか?あなたはもうそれをするためにそこにいません。
コマンドに組み込まれexec <command>
たシェルは、シェルを<command>
に置き換え、新しいプロセス、新しいPIDは作成されません。<command>
通常の完了後、ターミナルは閉じます。最初にバックグラウンドで実行することにより、サブシェルが作成され、その後同様にすぐに置き換えられ<command>
ます。
このnohup <command>
コマンドは実行されます<command>
が、ハングアップ(kill -s 1)が発生しないため、開始元のターミナルであるシェルが閉じられても終了しません。最初にバックグラウンドで実行すると、サブシェルが作成され、コマンドがバックグラウンドで実行されて、プロンプトに戻ります。
スクリプティングでは、即時効果はほぼ同じですが、<command>
スクリプトによって開始され、スクリプトは開始、<command>
出力の送信、または完了を待たずに続行します。
script.sh &
たりしますexec script.sh &
。どちらの場合も、コマンドは子プロセスで実行され、呼び出しプロセスを置き換えません。paste.alacon.org / 44474を参照してください(コメントでコピーするには長すぎます...)。私は何を間違えていますか?
あなたは比較することはできませんnohup
とexec
。で実行可能ファイルを実行するとnohup
、ログアウト(sshセッション)時にプロセスは強制終了されません。通常、低優先度でプロセスを実行するnohup
ために使用nice
されます。HUP
信号は、慣例により、端末がログアウトの依存プロセスを警告する方法です