シェルはプログラムをどのように実行しますか?

シェルはプログラムをどのように実行しますか?

gccを使用してプログラムをコンパイルしてbashシェルで実行しようとすると、bashがそれを実行する手順の正確な順序は何ですか?

私はそれがfork()、、、、(および他のもの)に関連していることを知っていますが、誰かが正しい手順の順序と適切な読書資料を提供できますかexecve()loaderdynamic linker

編集する:

答えを見ると、この質問には多くの可能性が含まれているようです。簡単なケースで範囲を絞りたいです。

(test.cはhello worldを印刷します)

$ gcc test.c -o test
$ ./test

上記の状況()のステップは何ですか./test?特に、ロード、リンクなどの一部のサブプロセスでbashプログラムを起動しますか?

ベストアンサー1

/usr/libexec/fooさて、実際のプログラムを実行する前に最初に拡張/解釈されるシェルエイリアスや関数があるかもしれません。あります。ディレクトリ環境PATH変数(ただfoo)。さらに、実行の詳細は、foo | bar | zotシェルが同様のものよりも多くのタスク(もちろん、いくつか、fork(2)および他のシステムコール)を実行する必要があるため、状況を複雑にすることができます。これはシェルが自分自身を呼び出すので、はるかに少ない作業が必要です。新しいプログラム(つまり、そうではありません)。また、プロセスグループ(特にフォアグラウンドプロセスグループ、誰かが​​マッシングを開始したときにすべてのPIDを取得する)、セッションとタスクがバックグラウンドで実行されるか、監視されるか()、または無視されるか()も重要です。背景。 / Oリダイレクトの詳細は、標準入力がshell()によって閉じられるかどうか、ファイルがstdin()で開かれるかどうかなども変更します。dup(2)pipe(2)exec fooforkSIGINTCtrlCfoo &foo & disownfoo <&-foo < blah

straceあるいは、同様のものは、このプロセス中に実行された特定のシステムコールに関する情報を提供し、各コールのマニュアルページが必要です。適切なシステムレベルの読み取りは、Stevensの「UNIX環境の高度なプログラミング」の章の1つであり、シェルブック(「BashからZシェルまで」など)では、シェルの側面について詳しく説明します。

おすすめ記事