Linuxコマンドの最後の「&」はどういう意味ですか?


94

私はシステム管理者であり、システムをクリーンアップするためにLinuxスクリプトを実行するように求められました。

コマンドは次のとおりです。

perl script.pl > output.log &

このコマンドは&記号で終わっていますが、特別な意味はありますか?

私はシェルの基本的な知識を持っていますが、これまでに見たことがありません。


すみません、私はそのような基本的なものについて知っていました
デュード

2
あなたは違いを探して、このページにしている場合&&&&バックグラウンドでの最初のコマンドを実行します。&&最初のコマンドを実行し、正常に終了した場合は条件付きで2番目のコマンドに進みます。
David Bodow

回答:


146

&バックグラウンドで実行コマンドになります。

からman bash

コマンドが制御演算子で終了した場合、シェルはサブシェルのバックグラウンドでコマンドを実行します。シェルはコマンドが完了するまで待機せず、戻りステータスは0です。


12

さらに、「&」記号を使用すると、端末の数を最小限に抑えるために、1つのssh接続を介して多くのプロセスを実行できます。たとえば、ファイルを抽出するためにメッセージをリッスンする1つのプロセスがあります。2番目のプロセスは、ファイルをアップロードするためにメッセージをリッスンします。 。


*****私は、「&」を介して実行されるこれらのプロセスが、sshセッションが閉じられた後も「存続」することに気づきました!サーバーへの接続が中断された場合、かなりきちんとしていて便利です**


nohupプロセスも存続させます。
Jerry Chin

2
&を使用すると、PIDも取得できるので、必要に応じてプロセスを終了できます。また、そのプロセスのステータスを確認できます
Dhaval Solanki

12

特に指示がない場合、コマンドがフォアグラウンドを引き継ぎます。1つのシェルセッションで実行されている「フォアグラウンド」プロセスは1つだけです。&記号は、コマンドにバックグラウンドプロセスで実行するように指示し、追加のコマンドのコマンドラインにすぐに戻ります。

sh my_script.sh &

シェルセッションが閉じられた後、バックグラウンドプロセスは存続しませんSIGHUPは、実行中のすべてのプロセスを終了します。とにかくデフォルトで。コマンドが長時間実行されているか、無期限に実行される場合(つまり、マイクロサービス)、セッションから切断した後もコマンドが実行されたままになるように、nohupでコマンドを保留する必要があります。

nohup sh my_script.sh &

編集:&が使用されている場合、バックグラウンドプロセスの終了に関して灰色の領域があるように見えます。OSとローカル構成(特にCENTOS / RHEL)によって、シェルプロセスを閉じる可能性があることに注意してください:https : //serverfault.com/a/117157


1

確かではありませんが、私は今本を読んでいます。私が得ているのは、プログラムがその信号を処理する必要があるということです(を押すときのようにCTRL-C)。これで、プログラムはを使用SIG_IGNしてすべての信号を無視するかSIG_DFL、デフォルトのアクションを復元できます。

これを行うと$ command &、バックグラウンドプロセスとして実行されるこのプロセスは、発生するすべての信号を単に無視します。フォアグラウンドプロセスの場合、これらの信号は無視されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.