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

「ls」を実行するために別のプロセスが必要なのはなぜですか?

なぜls 実行に別のプロセスが必要ですか?
cdのようなコマンドが必要な理由を知っています フォークメカニズムでは実行できませんが、lsの場合、害はありますか フォークせずに実行されますか?

承認された回答:

答えは多かれ少なかれls 外部実行可能ファイルです。 type -p lsを実行すると、その場所を確認できます。 。

lsではないのはなぜですか シェルに組み込まれていますか?さて、なぜそれが必要なのですか?シェルの役割は、使用可能なすべてのコマンドを網羅することではなく、それらを実行できる環境を提供することです。一部の最新のシェルにはechoがあります 、printf 、およびビルトインとしてのそれらの同類。技術的に 組み込みである必要がありますが、繰り返し実行される場合(主にタイトループで)のパフォーマンス上の理由から組み込まれています。それらを組み込みにしないと、シェルはそれらを呼び出すたびに新しいプロセスをフォークして実行する必要があり、これは非常に遅くなる可能性があります。

少なくとも、lsを実行する 、外部実行可能ファイルは、システムコールのexecファミリの1つを実行する必要があります。あなたはできた フォークせずにこれを行いますが、使用しているプラ​​イマリシェルが置き換えられます。次の手順を実行すると、そのインスタンスで何が起こるかを確認できます。

exec ls; echo "this never gets printed"

シェルのプロセスイメージが置き換えられたため、これを行うと現在のシェルにアクセスできなくなります。 lsを実行した後もシェルを実行し続けるには、コマンドをシェルに組み込む必要があります。

フォークを使用すると、プライマリシェルではないプロセスを置き換えることができます。つまり、後でシェルを実行し続けることができます。


Linux
  1. シェルコマンド置換が末尾の改行文字を飲み込むのはなぜですか?

  2. 一部のコマンドでBashプロセス置換が機能しないのはなぜですか?

  3. 「sudo-i」ログインシェルがヒアドキュメントのコマンド文字列引数を壊すのはなぜですか?

  1. 「cd -」は何の略ですか?

  2. このシェル パイプラインが終了するのはなぜですか?

  3. popen() がシェルを呼び出してプロセスを実行するのはなぜですか?

  1. rsync がローカル ファイルにデルタ転送を使用しないのはなぜですか?

  2. ブータブル USB の作成に 'dd' が機能しないのはなぜですか?

  3. Bash(Linux シェル)で Ctrl + V が貼り付けられないのはなぜですか?