cd
以外のディレクトリに移動して$HOME
を実行するとexec bash
、新しい bash が以前のシェルの作業ディレクトリで開始されます。
新しい bash は、以前の作業ディレクトリが何であったかをどのように認識していますか?
プロセス タスク構造には、継承された現在の作業ディレクトリがあります。Linux では、次のように表示できます。
ls -l /proc/self/cwd
新しいシェルを作成すると、親プロセスの現在の作業ディレクトリが継承されます。
作業ディレクトリは、オペレーティングシステムによって提供されるプロパティであり、必要かどうかに関係なく、プロセスに帰属します。
別のプロセス(親)によって生成されたプロセス(子)は、その側の介入なしに、生成プロセスの作業ディレクトリを受け取ります。
設計の一部として作業ディレクトリを使用するプロセスの他に、プロセスがクラッシュしたときにコアダンプの場所を決定するなどの目的でOSが使用することもできます。
すべてのプロセスがその親の作業ディレクトリを継承するのと同じように、その作業ディレクトリを継承します。
プログラムはどのように機能すると思いますpwd
か? getcwd
親から継承したシステムコールを使用して、独自の作業ディレクトリを取得するだけです。