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