Cygwin在Windows上提供了完整的fork()功能.因此,如果您可以接受使用Cygwin,那么在性能不成问题的情况下问题就解决了.
否则,您可以看看Cygwin如何实现fork().来自一个相当古老的Cygwin建筑doc:
5.6.流程创建 Cygwin的Forking 呼叫特别有趣 因为它不能很好地映射到 Win32 API.这让它变得非常 难以正确实施. 目前,Cygwinfork 是一种 非写入时拷贝实施 类似于早期出现的情况 UNIX的风格.
发生的第一件事是当一个 父进程派生一个子进程 父级初始化一个空间 在Cygwin进程表中为 子元素.然后,它创建一个挂起的 使用Win32的子进程 CreateProcess调用.接下来,父级 进程调用setjmp来保存它自己的 上下文,并在 Cygwin共享内存区(共享 在所有Cygwin任务中).然后它就会填满 在子项的.data和.bss部分中 通过从其自己的地址空间复制 进入停学 children 的地址 太空.在子元素的地址空间之后 初始化时,子对象在运行时 父级等待互斥锁.这子元素 发现它是被Forking 的 使用保存的 skip 缓冲区进行跳远. 然后,子级将互斥锁设置为 父级正在等待并阻止 另一个互斥体.这是一个信号, 要复制其堆栈和堆的父级 进入子元素体内,之后它 释放子级所在的互斥锁 等待并从岔口返回 打电话.最后,子元素从睡梦中醒来 阻塞最后一个互斥体,重新创建 传递给它的任何内存映射区域 通过共享区域,并从 fork 自己.
而我们对如何
但是,spawn和exec会展示他们的
听起来工作量很大,不是吗?是的,它是Slooow.
编辑:单据已过期,请查看此优秀answer进行更新