vfork 与 fork 的文件描述符 table

File descriptor table for vfork vs. fork

我是系统编程新手,在fork和vfork中遇到了一些误区


那么问题来了:

  1. 因为子进程共享父进程的地址,为什么它需要自己的文件描述符table?
  2. 如果我在子进程中声明一个变量,变量将存储在哪里? (会不会使用父进程的space) 非常感谢。
  1. 因为在子进程中调用exec之前重定向stdinand/orstdout是很常见的。如果它们共享相同的文件描述符 table,这将修改父进程的 I/O.

  2. 您不应在子进程中存储任何变量。 vfork() 仅应在您要立即调用 exec 函数时使用。

请注意,vfork() 在现代操作系统上已过时。他们使用 copy-on-write.

而不是复制地址 space

有关详细信息,请参阅 What is the difference between fork() and vfork()?