私はシステム管理者であり、システムをクリーンアップするためにLinuxスクリプトを実行するように求められました。
コマンドは次のとおりです。
perl script.pl > output.log &
このコマンドは&
記号で終わっていますが、特別な意味はありますか?
私はシェルの基本的な知識を持っていますが、これまでに見たことがありません。
私はシステム管理者であり、システムをクリーンアップするためにLinuxスクリプトを実行するように求められました。
コマンドは次のとおりです。
perl script.pl > output.log &
このコマンドは&
記号で終わっていますが、特別な意味はありますか?
私はシェルの基本的な知識を持っていますが、これまでに見たことがありません。
&
と&&
: &
バックグラウンドでの最初のコマンドを実行します。&&
最初のコマンドを実行し、正常に終了した場合は条件付きで2番目のコマンドに進みます。
回答:
さらに、「&」記号を使用すると、端末の数を最小限に抑えるために、1つのssh接続を介して多くのプロセスを実行できます。たとえば、ファイルを抽出するためにメッセージをリッスンする1つのプロセスがあります。2番目のプロセスは、ファイルをアップロードするためにメッセージをリッスンします。 。
*****私は、「&」を介して実行されるこれらのプロセスが、sshセッションが閉じられた後も「存続」することに気づきました!サーバーへの接続が中断された場合、かなりきちんとしていて便利です**
nohup
プロセスも存続させます。
特に指示がない場合、コマンドがフォアグラウンドを引き継ぎます。1つのシェルセッションで実行されている「フォアグラウンド」プロセスは1つだけです。&記号は、コマンドにバックグラウンドプロセスで実行するように指示し、追加のコマンドのコマンドラインにすぐに戻ります。
sh my_script.sh &
シェルセッションが閉じられた後、バックグラウンドプロセスは存続しません。SIGHUPは、実行中のすべてのプロセスを終了します。とにかくデフォルトで。コマンドが長時間実行されているか、無期限に実行される場合(つまり、マイクロサービス)、セッションから切断した後もコマンドが実行されたままになるように、nohupでコマンドを保留する必要があります。
nohup sh my_script.sh &
編集:&が使用されている場合、バックグラウンドプロセスの終了に関して灰色の領域があるように見えます。OSとローカル構成(特にCENTOS / RHEL)によっては、シェルがプロセスを閉じる可能性があることに注意してください:https : //serverfault.com/a/117157。
確かではありませんが、私は今本を読んでいます。私が得ているのは、プログラムがその信号を処理する必要があるということです(を押すときのようにCTRL-C
)。これで、プログラムはを使用SIG_IGN
してすべての信号を無視するかSIG_DFL
、デフォルトのアクションを復元できます。
これを行うと$ command &
、バックグラウンドプロセスとして実行されるこのプロセスは、発生するすべての信号を単に無視します。フォアグラウンドプロセスの場合、これらの信号は無視されません。