Linuxシステムでは、プログラムまたはbashシェルコマンドは正確にどのように機能しますか?

Linuxシステムでは、プログラムまたはbashシェルコマンドは正確にどのように機能しますか?

私はLinuxシステムでプロセスとシェルがどのように機能するかを研究しています。私の結論が正しいことを確認してください。

システムを起動すると、カーネルはinitプロセスを開始し、他のすべてのプロセスはこのプロセスのフォークを介して子プロセスとして実行されます。たとえば、プログラムを実行すると、親プロセスはプログラムから分岐し、分岐されたプロセスはexecを使用してプログラムを実行する子プロセス(または子プロセス)になります。たとえば、bashシェルを実行すると親プロセスが分岐し、execは分岐プロセスがbashプログラムが実行される子プロセスになるようにします。この時点で、私はbashシェルに入力したコマンドがどのように実行されるのか混乱しました。組み込みおよび外部コマンドはどのように渡されますか?たとえば、組み込みフォークがあるか、それにサブプロセスを作成しますか?

答え1

あなたが要求した質問は、Gnu / Linuxだけでなく、すべてのUnixに適用されます。

forka以降は実行する必要がないことに注意してください。したがって、シェル組み込みの場合、シェルは組み込みコマンドを分岐して実行します。

シェルはサブシェルも生成します。シェルは、必要ない場合(たとえば、単純な組み込みコマンドの場合)、分岐しません。ここで simple はパイプラインには含まれません。

あなたの質問に言及されていないパイプもあります。これはフォークの前に作成されますが、オプションで前後にfork接続されます(組み込みを参照)exec

関連情報