Language agnostic 正是什么拥有了';当前工作目录';?

Language agnostic 正是什么拥有了';当前工作目录';?,language-agnostic,process,operating-system,working-directory,platform-agnostic,Language Agnostic,Process,Operating System,Working Directory,Platform Agnostic,我知道什么是工作目录(wd)及其用途(至少用于编写软件) 我不明白的是wd的所有权。此外,我想了解不同操作系统的答案可能会有什么不同,因此,如果您对特定操作系统上的异常行为有任何澄清,我将不胜感激 那么首先,wd在哪里表现出来?它是否在一个进程内,并且由该进程创建的所有线程共享同一wd?如果wd被线程“A”修改,那么同样由线程“A”的进程生成的线程“B”是否可以立即看到更改 其次,wd最初是如何定义的?如果您从命令提示符启动某个程序,那么很容易看出它是如何启动的,但是如果某个进程生成了多个进程,

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

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

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

其次,wd最初是如何定义的?如果您从命令提示符启动某个程序,那么很容易看出它是如何启动的,但是如果某个进程生成了多个进程,该怎么办


注意:在其属性窗口中显示每个进程的wd

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

  • PWD是从进程的父进程继承的。有多少兄弟进程并不重要;他们都会分享他们最初的PWD


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

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


    在Windows上,
    CreateProcess
    向进程的内存添加一个结构,其中包含
    UNICODE\u字符串CurrentDirectoryPath
    HANDLE CurrentDirectoryHandle
    。在现有NT版本的Windows上,结构总是在
    0x20000
    处加载,但将来可能会发生变化。

    谢谢。为了澄清2,是在创建子进程时获取父进程的PWD副本,还是子进程“指向”父进程的PWD?需要注意的是,父进程可以(在大多数现代操作系统上)分叉时为子进程指定一个替代工作目录。@Styne666-子进程的工作目录字段独立于父进程。父进程工作目录的更改不应改变子进程。在Windows上,
    CreateProcess
    将一个
    RTL\u USER\u PROCESS\u PARAMETERS
    结构添加到进程的内存中,其中包含
    UNICODE\u字符串CurrentDirectoryPath
    HANDLE CurrentDirectoryHandle
    。来源:@多项式谢谢:)现在将所有这些作为一个单独的答案发布,这样我就可以给你适当的信任。