【问题标题】:File descriptor table for vfork vs. fork [duplicate]vfork 与 fork 的文件描述符表 [重复]
【发布时间】:2020-10-31 07:42:51
【问题描述】:

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

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

那么问题来了:

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

【问题讨论】:

  • 认为 vfork 已过时。 2020年没有理由使用它

标签: c linux fork system vfork


【解决方案1】:
  1. 因为在子进程中调用exec 之前,通常会重定向stdin 和/或stdout。如果它们共享同一个文件描述符表,这将修改父进程的 I/O。

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

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

欲了解更多信息,请参阅What is the difference between fork() and vfork()?

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 2012-10-16
    • 1970-01-01
    • 2015-07-25
    • 2011-05-15
    • 1970-01-01
    • 2012-07-28
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多