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

`exec [email protected]` は何をしますか?

"[email protected]" bit は位置パラメータ (通常はコマンド ライン引数) のリストに展開され、単語の分割とファイル名の生成 (「グロビング」) を避けるために個別に引用されます。

exec 現在のプロセスを、その引数を実行した結果のプロセスに置き換えます。

つまり、exec "[email protected]" 現在のプロセスがそれによって置き換えられるような方法で、コマンド ライン パラメータによって指定されたコマンドを実行します (exec コマンドを実行できます)。


exec "[email protected]" について説明する他の 2 つの回答 します。 Stack Overflow に関するこの回答は、なぜ Docker にとって重要なのかを説明しています。ご想像のとおり、これはシグナルと関係があります。

<ブロック引用>

これは、Docker でシグナルが正しくプロキシされるために重要です。たとえば、Redis が exec なしで起動された場合 、SIGTERM を受け取りません docker stop 時 きれいにシャットダウンする機会がありません。場合によっては、これがデータ損失やゾンビ プロセスにつながる可能性があります。

子プロセスを開始する場合 (つまり、 exec を使用しないでください) )、親プロセスは、必要に応じてシグナルの処理と転送を担当します。これが、supervisord を使用するのが最適な理由の 1 つです。 シグナルを適切に転送するため、コンテナ内で複数のプロセスを実行する場合と同様です。


"[email protected]" Bourne のようなシェルでは、リスト コンテキストでは、すべての位置パラメータが個別の引数として展開されます。

スクリプトでは、最初は、位置パラメータはスクリプト自体が受け取った引数です。

exec シェルと同じプロセスでコマンドを実行することです。これは、スクリプトが実行する最後のコマンドです。その後、プロセスはシェル以外のコマンドを実行するためです。

あなたのスクリプトが

#! /bin/sh -
exec "[email protected]"

そして、次のようなシェル コマンド ラインを使用してスクリプトを呼び出します。

/path/to/your-script 'echo' "some  test" 'x y'

exec を呼び出します echo で 、 some test 、および x y echo を実行する引数として (ほとんどの sh で 実装、/bin/echo echo とは対照的に shell builtin) 以前にシェルを実行していたのと同じプロセスで、 some test でスクリプトを解釈します と x y


Linux
  1. 「lc_all=c」は何をしますか?

  2. Exec 3とは何ですか?

  3. Ls -al。*コマンドは何を返しますか?

  1. nmコマンドのシンボル値は何を意味しますか?

  2. シェル スクリプトで [email protected] とはどういう意味ですか?

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

  1. Linuxコマンドが何をするかを知る方法

  2. この Linux コマンドの - はどういう意味ですか?

  3. 構文 |&はシェル言語で何を意味しますか?