0

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

  • 据我所知,fork 重复父进程的进程和子进程有自己的虚拟机和自己的文件描述符表。
  • 至于vfork,它共享父进程的VM,但子进程将有自己的文件描述符表。

那么问题来了:

  1. 由于子进程共享父进程的地址,为什么它需要自己的文件描述符表?
  2. 如果我在子进程中声明一个变量,该变量将存储在哪里?(它会使用父进程的空间吗)非常感谢。
4

1 回答 1

1
  1. 因为重定向stdin和/或stdout在调用exec子进程之前很常见。如果它们共享同一个文件描述符表,这将修改父进程的 I/O。

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

请注意,这vfork()在现代操作系统上已过时。他们使用写时复制,而不是复制地址空间。

有关更多信息,请参阅fork() 和 vfork() 之间的区别是什么?

于 2020-10-31T07:50:34.990 回答