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

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

因此,首先,WD在哪里表现出来?它是否在一个进程中,并且该进程创建的所有线程共享相同的wd?如果wd被线程“A”修改,更改是否立即对线程“B”可见,而线程“B”也是由线程“A”产生的?

其次,WD最初是如何定义的?如果您从命令提示符处开始操作,那么它很容易看到,但是如果产生一个进程又会产生几个进程呢?

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

最佳答案

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

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

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

关于language-agnostic - 到底是谁拥有 'current working directory'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9082804/

10-12 18:07