由于 POSIX.1 合规性是 Windows 的强制性目标,因此操作系统旨在确保提供所需的基本系统支持,以允许实现 POSIX.1 子系统(例如 fork 函数,该函数在Windows 执行程序,以及对 Windows 文件系统中硬文件链接的支持)。
这个 fork 函数是写时复制吗?如果是这样,它是否仍然存在于最新版本的 Windows 中?如果是这样,它是否也可以调用 Win32 应用程序(尽管是未记录的 API)?
根据 Windows Internals 的记忆,fork 是一种写时复制的实现。根据 Windows 内存管理器其余部分的工作方式,如果它是其他任何东西,那将是不寻常和令人惊讶的。
我似乎还记得实现 fork 的方式是将所有内存分配放在部分对象中,以便可以使用写入时复制设置跨进程复制这些部分。
不幸的是,这意味着您可能无法在非 posix 子系统进程中使用它,因为您需要仔细设置地址空间以仅包含部分。标准 Win32 进程不这样做。
此外,如果你要支持 fork(),每个人都需要支持它——从内核开始。对于可能会惊讶于 fork()-ed 的系统示例,请考虑窗口系统。在那种情况下它甚至会做什么?(我假设 X11 对此有答案,但我不知道它是什么)。由于在 Windows 上进行 fork()-ing 将是一件非常不寻常的事情,因此如果您要对标准 Win32 进程执行此操作,我希望您的进程会完全无聊。