一部のLinuxシェルスクリプトがexecを使用してコマンドを実行するのはなぜですか?

フランク

次のようなLinuxbashスクリプトの場合:

exec /usr/lib/4.5/mono-service.exe ./AudioVideoRecorder.exe "$@"

、なぜ私はexecコマンドを実行する必要があり、execパーツなしで実行するだけではないのですか?

PSkocik

簡単に言うと、そうではありませんが、CPU時間を約1ミリ秒節約できます(最新のCPUの場合)。execスクリプトの最後でのみ実行する必要があることに注意してくださいexecこれ以降は実行されないためです)。

より長い答えは次のとおりです。 Exec現在のプロセスのプロセスイメージを、実行する実行可能ファイルのプロセスイメージに置き換えます。つまり、実行した瞬間に、execingを実行するシェルプロセスが完全に破棄され、execedプログラムに置き換えられます。そうしないexecと、シェルはそれ自体をフォークし、フォーク内で実行し、子プロセスが終了するのを待って、その戻りステータスを収集します。後で実行する追加のコマンドがあることを期待します(fork+execは標準の手順です。新しいコマンドが生成されます)。何もないので、これforkは完全に時間の無駄であり、直接実行してそのfork時間を節約することもできます。

ほとんどの目的と目的では、プロセスがUnicesでどのように生成されるかに関する知識に基づいた、本質的にはマイクロ最適化です。


注:ilkkachuのおかげで)わずかなセマンティックの違いが生じるのは、スクリプトを生成するプロセスが、実行された可能性のあるプログラムがどのように終了するかを気にするかどうかです。実行された可能性のある子が正常に終了する場合、シェルスクリプトは最後に待機した終了ステータスを独自の終了ステータスに転送するため、実行形式と非実行形式は同等です。ただし、子がシグナルn死亡した場合、シェルはそれを終了ステータスに変換し128+n、シグナルされた情報を事実上失います。(子が終了コードで定期的に終了しないことが確実な場合、情報は失われません>128、これは通常の場合です。)execを実行すると、ミドルマンシェルはなくなり、終了ステータス情報は実行スクリプトの呼び出し元に直接送信されます(また、子をマージするミドルマンシェルがないため、子が終了したか通知されたかに関する情報は保持されます。終了コード)。(詳細については、waitpid(2)参照してください)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

bashシェルスクリプトの一部としてDockerコンテナでコマンドを実行する方法

分類Dev

シェルが$(<file)の出力の一部をコマンドとして扱うのはなぜですか?

分類Dev

Inno Setupが一部のマシンで実行可能ファイルのインストールをスキップするのはなぜですか?

分類Dev

sedコマンドがbashの一部の行をスキップするのはなぜですか?

分類Dev

'&'を指定してLinuxシェルコマンドを実行するのはなぜですか?

分類Dev

一部のアプリケーションを実行するために最初に「インストール」する必要があるのに、他のアプリケーションは実行しないのはなぜですか?

分類Dev

bash配列の一部がコマンドとして実行されるのはなぜですか?

分類Dev

シェルスクリプトの一部としてバックグラウンドでトンネルを実行する方法

分類Dev

`find`と` xargs`を使用してシェルスクリプトで複数のコマンドを実行する

分類Dev

NodejsシェルスクリプトはLinuxでは正常に機能しますが、Windowsでは機能しません。複数のコマンドを実行しないのはなぜですか

分類Dev

グループ化コマンドで単純なコマンドを実行してもサブシェルプロセスがフォークされず、複合コマンドがフォークするのはなぜですか

分類Dev

Android Studioが一部のGitコマンドを実行できるのに、UIがマージを実行しようとしてNPEをスローするのはなぜですか?

分類Dev

シェルスクリプトを使用してgnuplotでコマンドを実行する方法は?

分類Dev

SSH / Paramikoで別のシェルを使用してコマンド/スクリプトを実行します

分類Dev

コンテナ内でPythonスクリプトを実行するためにシェルスクリプトが必要なのはなぜですか?

分類Dev

シェルスクリプトの引用符がシェルコマンドの引用符と異なる動作をするのはなぜですか?

分類Dev

サブプロセスを使用してシェルスクリプトを呼び出すと、シェルスクリプトのすべてのコマンドが実行されるわけではありません

分類Dev

シェルスクリプトを実行した後、Dockerが終了するのはなぜですか?

分類Dev

コマンドラインからスクリプトの一部を実行することは可能ですか?

分類Dev

LinuxシェルスクリプトでPythonコマンドを並行して実行する

分類Dev

シェルスクリプトでさまざまな変数のコマンドを実行するには

分類Dev

テストコマンドから]を除外しても[スクリプトの実行が停止しないのはなぜですか?

分類Dev

シェルスクリプト内でdockerコマンドを実行できないのはなぜですか

分類Dev

シェルスクリプトを使用して文字列の一部が一致する場合は、行を置き換えます

分類Dev

「at」コマンドはあらゆる種類のシェルスクリプトを実行できますか?

分類Dev

コマンドを/ etc / profileに追加して、Raspberry Piの起動時にPythonスクリプトを実行しようとすると、Pythonスクリプトがバックグラウンドで2回実行されるのはなぜですか?

分類Dev

シェルスクリプト(pdftkを使用)でこの行をコメントアウトすると問題が発生するのはなぜですか?

分類Dev

コマンドラインの実行がPowerShellでのスクリプトの実行に異なる結果をもたらすのはなぜですか

分類Dev

bashスクリプトでgrepコマンドを使用して行を検索し、行の一部のみを出力し、特に単語自体を除外するにはどうすればよいですか?

Related 関連記事

  1. 1

    bashシェルスクリプトの一部としてDockerコンテナでコマンドを実行する方法

  2. 2

    シェルが$(<file)の出力の一部をコマンドとして扱うのはなぜですか?

  3. 3

    Inno Setupが一部のマシンで実行可能ファイルのインストールをスキップするのはなぜですか?

  4. 4

    sedコマンドがbashの一部の行をスキップするのはなぜですか?

  5. 5

    '&'を指定してLinuxシェルコマンドを実行するのはなぜですか?

  6. 6

    一部のアプリケーションを実行するために最初に「インストール」する必要があるのに、他のアプリケーションは実行しないのはなぜですか?

  7. 7

    bash配列の一部がコマンドとして実行されるのはなぜですか?

  8. 8

    シェルスクリプトの一部としてバックグラウンドでトンネルを実行する方法

  9. 9

    `find`と` xargs`を使用してシェルスクリプトで複数のコマンドを実行する

  10. 10

    NodejsシェルスクリプトはLinuxでは正常に機能しますが、Windowsでは機能しません。複数のコマンドを実行しないのはなぜですか

  11. 11

    グループ化コマンドで単純なコマンドを実行してもサブシェルプロセスがフォークされず、複合コマンドがフォークするのはなぜですか

  12. 12

    Android Studioが一部のGitコマンドを実行できるのに、UIがマージを実行しようとしてNPEをスローするのはなぜですか?

  13. 13

    シェルスクリプトを使用してgnuplotでコマンドを実行する方法は?

  14. 14

    SSH / Paramikoで別のシェルを使用してコマンド/スクリプトを実行します

  15. 15

    コンテナ内でPythonスクリプトを実行するためにシェルスクリプトが必要なのはなぜですか?

  16. 16

    シェルスクリプトの引用符がシェルコマンドの引用符と異なる動作をするのはなぜですか?

  17. 17

    サブプロセスを使用してシェルスクリプトを呼び出すと、シェルスクリプトのすべてのコマンドが実行されるわけではありません

  18. 18

    シェルスクリプトを実行した後、Dockerが終了するのはなぜですか?

  19. 19

    コマンドラインからスクリプトの一部を実行することは可能ですか?

  20. 20

    LinuxシェルスクリプトでPythonコマンドを並行して実行する

  21. 21

    シェルスクリプトでさまざまな変数のコマンドを実行するには

  22. 22

    テストコマンドから]を除外しても[スクリプトの実行が停止しないのはなぜですか?

  23. 23

    シェルスクリプト内でdockerコマンドを実行できないのはなぜですか

  24. 24

    シェルスクリプトを使用して文字列の一部が一致する場合は、行を置き換えます

  25. 25

    「at」コマンドはあらゆる種類のシェルスクリプトを実行できますか?

  26. 26

    コマンドを/ etc / profileに追加して、Raspberry Piの起動時にPythonスクリプトを実行しようとすると、Pythonスクリプトがバックグラウンドで2回実行されるのはなぜですか?

  27. 27

    シェルスクリプト(pdftkを使用)でこの行をコメントアウトすると問題が発生するのはなぜですか?

  28. 28

    コマンドラインの実行がPowerShellでのスクリプトの実行に異なる結果をもたらすのはなぜですか

  29. 29

    bashスクリプトでgrepコマンドを使用して行を検索し、行の一部のみを出力し、特に単語自体を除外するにはどうすればよいですか?

ホットタグ

アーカイブ