5

作業ディレクトリ (wd) とその目的 (少なくともソフトウェアを作成するため) を認識しています。

私が理解していないのは、wd の所有権です。さらに、オペレーティング システム間で答えがどのように異なるかを理解したいので、特定の OSでの異常な動作に関する説明をいただければ幸いです。

まず、wd はどこに現れるのでしょうか。それはプロセス内にあり、そのプロセスによって作成されたすべてのスレッドは同じ wd を共有していますか? スレッド 'A' によって wd が変更された場合、スレッド 'A' のプロセスによって生成されたスレッド 'B' にその変更が即座に表示されますか?

次に、wd は最初にどのように定義されますか? コマンド プロンプトから何かを開始する場合、その方法は簡単にわかりますが、さらにいくつかのプロセスを生成するプロセスについてはどうでしょうか。


注: Process Explorer では、[プロパティ] ウィンドウに各プロセスの wd が表示されます。

4

2 に答える 2

4

最近のほとんどのオペレーティング システムでは、作業ディレクトリはプロセスのプロパティです。親プロセスが子プロセスを fork すると、(デフォルトで) 同じ作業ディレクトリが作成されます。この動作は通常、作業ディレクトリを明示的に指定することでオーバーライドできます。

分岐すると、子の作業ディレクトリ フィールドは親から独立します。親の作業ディレクトリを変更しても、子プロセスは変更されません。作業ディレクトリに関連するハンドルまたはセキュリティ トークンを複製する動作は、オペレーティング システムに大きく依存します。

Windows では、 とを含む構造をプロセスのメモリにCreateProcess追加します。この構造は、Windows の既存の NT バージョンでは常にロードされますが、これは将来変更される可能性があります。RTL_USER_PROCESS_PARAMETERSUNICODE_STRING CurrentDirectoryPathHANDLE CurrentDirectoryHandle0x20000

于 2012-01-31T16:30:54.563 に答える
3
  1. 一般に、現在の作業ディレクトリはプロセスごとの構成であるため、プロセス内のすべてのスレッドは単一の PWD を共有chdirし、他のスレッドに即座に伝播します。clone(Linux では、低レベルのシステム コールを使用して、独自の PWD を持つスレッドを作成できます。)

  2. PWD は、プロセスの親から継承されます。兄弟プロセスの数は問題ではありません。それらはすべて、最初の PWD を共有します。

于 2012-01-31T16:11:55.453 に答える