【问题标题】:What happens to the file descriptor table in parent process after calling dup2 and execvp in the child process?在子进程中调用 dup2 和 execvp 后,父进程中的文件描述符表会发生什么变化?
【发布时间】:2014-07-31 02:54:38
【问题描述】:

我正在编写一个简单的 shell 程序,但不确定在 dup2() 和 execvp 之后文件描述符表会发生什么。所以我有一个父进程等待子进程结束(waitpid)但是当它循环回来等待下一个用户输入时,我在子进程中使用 dup2 修改的文件描述符表为什么不会保留在父进程中?是因为 execvp 将文件描述符表重置回原来的吗?

编辑:我想通了。 fork 函数实际上制作了程序映像的单独副本,包括文件描述符表,因此父进程的 fd 表不受影响。

【问题讨论】:

    标签: c process exec dup2


    【解决方案1】:

    什么都没有。子进程在由fork() 创建时获得父文件描述符的副本,但在此之后所做的更改不会共享回父进程。

    (请注意,虽然文件描述符 table 不与父级共享,但文件描述符本身的状态是!例如,如果您在文件描述符上 seek()进程继承自其父进程,这也会影响父进程中的副本。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      相关资源
      最近更新 更多