Linux中fork子进程后再exec新程序时文件描述符的问题?

发布于 2022-09-03 12:06:29 字数 189 浏览 18 评论 0

fork后,我们会调用exec执行另一个程序,此时会用全新的程序替换子进程的正文,数据,堆和栈,那这样的话子进程的文件描述符表所占的内存也自动释放了吧,为什么还会存在是否要关闭子进程的文件描述符一说?

难道不关闭子进程的文件描述符,exec新的程序还能使用?新的程序好比是一个新的进程,而文件描述符是进程之间独立的,所以这不合乎逻辑啊?求大神解惑

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

得不到的就毁灭 2022-09-10 12:06:29

是的,子进程的文件描述符确实已经释放了,但是关闭文件描述符最大的原因是因为缓冲机制的存在,如果不关闭就会导致数据不完整写入。当然,还有一些原因。exec 函数后可以认为是一个新的进程,除了进程标识符以外都是新的,文件描述符是进程维护的,但是进程描述符说穿了只是一个类似指针一样的东西,它真正指向的是内核维护的文件表,只回收了文件描述符,不回收文件表项就跟内存泄漏一个道理。

月下伊人醉 2022-09-10 12:06:29

请参考 close_on_exec

正如你所言, 子进程不关闭文件描述符的话, exec后确实是还可以使用的,比如说0,1,2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文