5

我知道工作目录 (wd) 是什么以及它的用途(至少用于编写软件)。

我不明白的是 wd 的所有权。此外,我想了解操作系统之间的答案可能会如何变化,因此对特定操作系统上异常行为的任何澄清将不胜感激。

那么首先, wd 在哪里表现出来?它是否在一个进程内,并且该进程创建的所有线程共享相同的 wd?如果 wd 被线程“A”修改,那么线程“B”是否可以立即看到更改,线程“B”也是由线程“A”的进程产生的?

其次, wd 最初是如何定义的?如果您从命令提示符启动某些内容,那么容易看出如何,但是如果一个进程产生多个进程呢?


注意:进程资源管理器在其“属性”窗口中显示每个进程的 wd。

4

2 回答 2

4

在大多数现代操作系统上,工作目录是进程的属性。当父进程派生出子进程时,它将(默认情况下)具有相同的工作目录。通常可以通过显式指定工作目录来覆盖此行为。

一旦分叉,孩子的工作目录字段就独立于父母。父工作目录的更改不应改变子进程。复制与工作目录相关的任何句柄或安全令牌的行为高度依赖于操作系统。

在 Windows 上,CreateProcessRTL_USER_PROCESS_PARAMETERS结构添加到进程的内存中,其中包含UNICODE_STRING CurrentDirectoryPathHANDLE CurrentDirectoryHandle. 该结构始终加载在0x20000现有 NT 版本的 Windows 上,但将来可能会改变。

于 2012-01-31T16:30:54.563 回答
3
  1. 通常,当前工作目录是每个进程的结构,因此进程中的所有线程共享一个 PWD,并且chdir会立即传播到其他线程。(在 Linux 上,可以使用低级clone系统调用创建具有自己 PWD 的线程。)

  2. PWD 继承自进程的父进程。有多少兄弟进程无关紧要;他们都会分享他们最初的 PWD。

于 2012-01-31T16:11:55.453 回答