究竟拥有“当前工作目录”的是什么?

时间:2012-01-31 16:07:58

标签: language-agnostic process operating-system working-directory platform-agnostic

我知道工作目录(wd)是什么,它的目的是(至少编写软件)。

我不明白的是wd的所有权。此外,我想了解操作系统之间的答案可能有所不同,因此可以理解对特定操作系统上异常行为的任何澄清。

首先,wd在哪里显现?它是否在一个进程中,并且该进程创建的所有线程共享相同的wd?如果wd被线程'A'修改,那么线程'B'的变化是否立即可见,这也是由线程'A的进程产生的?

其次,wd最初是如何定义的?如果你从一个命令提示符启动它的相当很容易看到如何,但是一个进程产生了多个进程呢?


注意:Process Explorer在其“属性”窗口中显示每个进程的“wd”。

2 个答案:

答案 0 :(得分:4)

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

分叉后,子项的工作目录字段与父项无关。更改父级的工作目录不应更改子进程。复制与工作目录相关的任何句柄或安全性令牌的行为在很大程度上取决于操作系统。

在Windows上,CreateProcess会在流程的内存中添加RTL_USER_PROCESS_PARAMETERS结构,其中包含UNICODE_STRING CurrentDirectoryPathHANDLE CurrentDirectoryHandle。该结构始终在0x20000上加载到现有的NT版Windows上,但这可能会在将来发生变化。

答案 1 :(得分:3)

  1. 通常,当前工作目录是每个进程的构造,因此进程中的所有线程共享一个PWD,并且chdir立即传播到其他线程。 (在Linux上,可以使用低级clone系统调用创建具有自己的PWD的线程。)

  2. PWD继承自进程的父级。有多少兄弟进程并不重要;他们都会分享他们最初的残疾人。