1

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

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

4

1 回答 1

0

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

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

于 2014-07-31T04:41:23.763 回答