プロセスは論理作業ディレクトリと物理作業ディレクトリの両方を継承しますか?

プロセスは論理作業ディレクトリと物理作業ディレクトリの両方を継承しますか?

プロセスが起動されると、親プロセスの作業ディレクトリを継承することはわかっています。しかし、論理作業ディレクトリと物理作業ディレクトリの両方を継承するのでしょうか、それとも物理作業ディレクトリだけでしょうか?

答え1

うーん、そうですね。「論理的な」作業ディレクトリは環境変数で引き継がれますPWDenviron(7)これは「一部のシェルによって設定される」と書かれているので、明らかにアプリケーションに依存します。別の問題は、他のプログラムがそれを読み取るかどうかです。

/tmp$ ln -s ~ link  
/tmp$ cd link  
/tmp/link$ bash -c "pwd"
/tmp/link
/tmp/link$ zsh -c "pwd" 
/home/itvirta
/tmp/link$ dash -c "pwd"
/tmp/link

Bash はdashそれを頼りにしているように見えますが、zshそうではありません (私のシステムでは、設定可能であることは確かです)。

答え2

取得するシステムコールは物理パス名を返す。POSIX義務づける

パス名にはドットやドットドット、またはシンボリックリンクのコンポーネントを含めないでください。

Linux は、別のプログラムが CWD として使用している間にディレクトリの名前を変更できるため、CWD を渡すために名前よりも低レベルのメカニズムを使用しているようです。

関連情報