在子进程中调用dup2和execvp后,父进程中的文件描述符表会发生什么变化?

在子进程中调用dup2和execvp后,父进程中的文件描述符表会发生什么变化?,c,process,exec,dup2,C,Process,Exec,Dup2,我正在编写一个简单的shell程序,但不确定dup2()和execvp之后文件描述符表会发生什么。因此,我有一个父进程在等待子进程结束(waitpid),但当它返回以等待下一个用户输入时,我在子进程中使用dup2修改的文件描述符表怎么会在父进程中不持久?是因为execvp将文件描述符表重置回原始状态吗 编辑:我想出来了。fork函数实际上是程序映像的单独副本,包括文件描述符表,因此父进程的fd表不受影响 没什么。当父进程的文件描述符由fork()创建时,子进程将获取父进程的文件描述符副本,但它在

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


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

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

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