语言无关 – 确切地说,拥有“当前工作目录”的是什么?

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

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

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

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

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

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

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

在Windows上,CreateProcess将RTL_USER_PROCESS_PARAMETERS结构添加到进程的内存中,其中包含UNICODE_STRING CurrentDirectoryPath和HANDLE CurrentDirectoryHandle.在现有的NT版本的Windows上,结构总是加载到0x20000,但这可能会在将来发生变化.

转载注明原文:语言无关 – 确切地说,拥有“当前工作目录”的是什么? - 代码日志