GNU/Linux >> Linux の 問題 >  >> Linux

「&」を使用して Linux シェル コマンドを実行するのはなぜですか?

Bash シェル スクリプトでは、アンパサンド「&」を使用してプロセスをフォークします。

find -name hello &

これにより、find コマンドがフォークされ、バックグラウンドで実行されます (PID でいつでも強制終了できます)。


<ブロック引用>

「&」を使用して Linux シェル コマンドを実行する理由

プロンプトをすぐに戻し、プロセスをバックグラウンドで実行するには。

<ブロック引用>

それらの機能は何ですか?

いいえ ユーザーがログアウトした (または開始シェルを終了した) 後でも、バックグラウンド プロセスを実行し続けることができます。

>& 標準出力と標準エラーの両方をログ ファイルにリダイレクトします。

& すべてをバックグラウンドで実行し、プロンプトをすぐに返します。

説明:

すべての Linux プロセスは、入力 "stdin"、標準出力 "stdout"、および標準エラー出力 "stderr" の 3 つの I/O チャネルを開きます。バイナリに使用できますが、伝統的にテキストです。ほとんどのプログラムは stdin が閉じていることを確認すると終了します (これはプログラマーが変更できます)。

親シェルが終了すると、stdin は子で閉じられ、(多くの場合、通常) 子も終了します。さらに、子プロセスはソフトウェア シグナル SIGHUP を受信します。これは、ユーザーが "電話を切った" (以前はモデム) ことを示します。ここでのデフォルトでは、同様に終了します。 (注:プログラマーは、プログラムを作成するときにこれらすべてを変更できます)。

したがって、nohup が行うことは、子プロセスに別の I/O 環境を与え、親シェルに関連付けられていないものにインとアウトを結び付け、子プロセスを SIGHUP シグナルから保護することです。ユーザーが切断すると、ユーザーのシェルではなく、init (プロセス 1) が所有する nohup バックグラウンド プロセスが表示されます。

ただし nohup プロセスがフォアグラウンドで実行されている場合、ジョブを完全に実行できないため、& バックグラウンドでプログラムを実行するために使用され、ユーザーがログインしているかどうかに関係なく実行し続けることができます。


Martin さん、Ash さん、Kevin さんの回答に加えて、数学的にビットごとの AND に使用されるアンパサンドが表示されることがあります。

$ echo $(( 11 & 7 ))
3

ビット演算子に慣れていない場合:

11: 1011
 7: 0111
-------- AND
 3: 0011

各位置で、最初の数字と 2 番目の数字に 1 ビットがあり、そのビットを答えで 1 に設定します。

Ashの答えを詳しく説明すると、リダイレクトでアンパサンドを使用すると、シェルにファイル記述子をコピーするように指示できます。このコマンドで echo "hello" > outputfile 2>&1 アンパサンドを使用すると、標準エラー (stderr、ファイル記述子 2) に送られる可能性のある出力が、標準出力 (stdout、ファイル記述子 1、> の左側のデフォルト) と同じ場所に送られます。 )。 >& outputfile operator は > outputfile 2>&1 の短縮形です .

また、Bash 4 の新機能として、case の句に 2 つの新しいターミネータがあります。 コマンド ;&;;& これは、ケースが「失敗」するかどうかに影響し、失敗した場合は次のテストが実行されるかどうかに影響します。


Linux
  1. xtermを使い続ける理由

  2. 例を含むLinuxTeeコマンド

  3. LinuxでのJQコマンドと例

  1. 例を含むwcLinuxコマンド

  2. Linuxのソートコマンドと例

  3. Linuxでのエコーコマンド(例付き)

  1. Linuxでのmanコマンドと例

  2. LinuxでのAWKコマンドと例

  3. Linuxで制限時間(タイムアウト)を使用してコマンドを実行する方法