なぜls 実行に別のプロセスが必要ですか?
cdのようなコマンドが必要な理由を知っています フォークメカニズムでは実行できませんが、lsの場合、害はありますか フォークせずに実行されますか?
承認された回答:
答えは多かれ少なかれls 外部実行可能ファイルです。 type -p lsを実行すると、その場所を確認できます。 。
lsではないのはなぜですか シェルに組み込まれていますか?さて、なぜそれが必要なのですか?シェルの役割は、使用可能なすべてのコマンドを網羅することではなく、それらを実行できる環境を提供することです。一部の最新のシェルにはechoがあります 、printf 、およびビルトインとしてのそれらの同類。技術的に 組み込みである必要がありますが、繰り返し実行される場合(主にタイトループで)のパフォーマンス上の理由から組み込まれています。それらを組み込みにしないと、シェルはそれらを呼び出すたびに新しいプロセスをフォークして実行する必要があり、これは非常に遅くなる可能性があります。
少なくとも、lsを実行する 、外部実行可能ファイルは、システムコールのexecファミリの1つを実行する必要があります。あなたはできた フォークせずにこれを行いますが、使用しているプライマリシェルが置き換えられます。次の手順を実行すると、そのインスタンスで何が起こるかを確認できます。
exec ls; echo "this never gets printed"
シェルのプロセスイメージが置き換えられたため、これを行うと現在のシェルにアクセスできなくなります。 lsを実行した後もシェルを実行し続けるには、コマンドをシェルに組み込む必要があります。
フォークを使用すると、プライマリシェルではないプロセスを置き換えることができます。つまり、後でシェルを実行し続けることができます。