私はシステム管理者であり、システムをクリーンアップするためにLinuxスクリプトを実行するように求められました。
コマンドは次のとおりです。
perl script.pl > output.log &
&
このコマンドは記号で終わっていますが、特別な意味はありますか?
私はシェルの基本的な知識を持っていますが、これはこれまで見たことがありません。
は&
、コマンドをバックグラウンドで実行します。
差出人man bash
:
コマンドが制御演算子&によって終了された場合、シェルはサブシェルのバックグラウンドでコマンドを実行します。シェルはコマンドが終了するのを待たず、戻りステータスは0です。
特に指示がない場合、コマンドがフォアグラウンドを引き継ぎます。1つのシェルセッションで実行されている「フォアグラウンド」プロセスは1つだけです。&記号は、コマンドをバックグラウンドプロセスで実行するように指示し、すぐにコマンドラインに戻って追加のコマンドを実行します。
sh my_script.sh &
シェルセッションが閉じられた後、バックグラウンドプロセスは存続しません。SIGHUPは、実行中のすべてのプロセスを終了します。とにかくデフォルトで。コマンドが長時間実行されているか、無期限に実行されている場合(つまり、マイクロサービス)、セッションから切断した後も実行され続けるように、コマンドをnohupで保留する必要があります。
nohup sh my_script.sh &
編集:&が使用されている場合、バックグラウンドプロセスの終了に関して灰色の領域があるように見えます。OSとローカル構成(特にCENTOS / RHEL)によって は、シェルがプロセスを閉じる場合があることに注意してください: https ://serverfault.com/a/117157 。
さらに、「&」記号を使用して、1つのssh接続を介して多くのプロセスを実行し、端末の数を最小限に抑えることができます。たとえば、ファイルを抽出するためにメッセージをリッスンする1つのプロセスがあり、ファイルをアップロードするために2番目のプロセスがメッセージをリッスンします。「&」を使用すると、サーバーへの単一のssh接続を介して1つの端末で両方のサービスを実行できます。 。
「&」を介して実行されているこれらのプロセスは、sshセッションが閉じられた後も「存続」します。サーバーへのssh接続が中断され、ターミナルマルチプレクサ(screen、tmux、byobu)が使用されていない場合は、非常に便利です。
よくわかりませんが、今本を読んでいます。プログラムがその信号を処理する必要があるということです(を押したときのようにCTRL-C
)。これで、プログラムはSIG_IGN
すべてのシグナルを無視したりSIG_DFL
、デフォルトのアクションを復元したりするために使用できます。
これを行う$ command &
と、バックグラウンドプロセスとして実行されているこのプロセスは、発生するすべてのシグナルを単に無視します。フォアグラウンドプロセスの場合、これらの信号は無視されません。
実行され、ステータス0(プロンプトの制御)をすぐに返さないコマンドがある場合。
例えば:
コマンドgedit
は、デフォルトのエディターgedit
UIを起動します。
コマンドeclipse
はEclipseIDEを起動します。
このようなコマンドは、ターミナルでアクティビティのログをスローし続け、コマンドプロンプトを返しません。
問題は、そのようなコマンドをバックグラウンドで実行して、コマンドターミナルを取得し、ターミナルを他のタスクに使用できるようにする方法です。
答えは&
、そのようなコマンドの後に追加することです。
user@mymachine:~$ <command> &
例:
user@mymachine:~$ <command> gedit &
user@mymachine:~$ <command> eclipse &