理解“在fork之后任何可以在exec中存活的进程设置可能会被更改”

时间:2011-07-31 20:15:18

标签: process operating-system

引自维基百科:

  

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?

是否有一些例子?

谢谢和问候!

1 个答案:

答案 0 :(得分:1)

fork()和exec()之间会发生“更改”。相当多的进程状态是在exec中继承的,请参阅http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html。特别是,文件描述符是继承的(除非它们设置了close-on-exec位)。

通常使用pipe()和dup()系列调用来设置管道和重定向文件描述符。例如。将子进程的标准输入和输出连接到管道,以便父进程可以与子进程通信。