引自维基百科:
Microsoft Windows派生函数受Unix函数的启发 叉和执行;但是,因为Windows不支持fork(至少在 Win32 API; POSIX仿真环境,如Cygwin或SFU do), 提供spawn函数作为fork-exec的替代品 组合。
然而,产卵功能,虽然它适当地处理 最常见的用例,缺乏fork-exec的全部功能,因为之后 fork任何可以在exec中存活的进程设置可能会被更改。 但是,在大多数情况下,这种不足可以通过使用来弥补 更低级的CreateProcess API。
我想知道如何理解Windows spaw()弱于Unix fork-exec的原因:“在fork之后,任何可以在exec中存活的进程设置可能会被更改”?
何时对某些进程设置进行“更改”:fork和exec之间或exec之后?
在子进程中,环境变量是否会从其父进程服务继承exec?
是否有一些例子?
谢谢和问候!
答案 0 :(得分:1)
fork()和exec()之间会发生“更改”。相当多的进程状态是在exec中继承的,请参阅http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html。特别是,文件描述符是继承的(除非它们设置了close-on-exec位)。
通常使用pipe()和dup()系列调用来设置管道和重定向文件描述符。例如。将子进程的标准输入和输出连接到管道,以便父进程可以与子进程通信。