在子进程中调用dup2和execvp后,父进程中的文件描述符表会发生什么情况?
题
我正在编写一个简单的shell程序,但不确定在dup2()和execvp之后文件描述符表会发生什么。所以我有一个父进程等待子进程结束(waitpid),但是当它循环回等待下一个用户输入时,我在子进程中使用dup2修改的文件描述符表为什么不会持久存在于父是因为execvp将文件描述符表重置回原始?
编辑:我知道了。Fork函数实际上制作了程序映像的单独副本,包括文件描述符表,因此父进程的fd表不受影响。
解决方案
虚无。子进程获取父进程的文件描述符的副本,当它由 fork()
, ,但之后所做的更改不会共享回父级。
(请注意,虽然文件描述符 表 不与父级共享,文件描述符本身的状态是!例如,如果你 seek()
在子进程从其父进程继承的文件描述符上,这也会影响父进程中的副本。)
不隶属于 StackOverflow