C:fork()之后关闭(2)?
急问,希望有人能验证。分叉后,如果您在父级中调用 close(2)
,子级中的 stderr 不受影响。但是,如果您在子级中调用 close(2)
,则父级中的 stderr 将关闭。这看起来对吗?我在 FreeBSD 中测试了这一点,似乎是这样,但我不确定为什么。我希望它们要么不互相影响,要么互相影响,但不是这样。
有什么见解吗?
Quick question, hoping someone can verify. After a fork, if you call close(2)
in the parent, stderr in the child is unaffected. However, if you call close(2)
in the child, stderr in the parent is closed. Does that seem right? I tested this in FreeBSD and it seems to be the case, but I'm not sure why. I would expect that either they both don't affect each other or they do, but not this.
Any insight?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
分叉后,父级中的每个打开的文件描述符都会被复制,因此分叉后的任何关闭都不会影响父级或子级。
除非您做得不正确(即没有检查 fork() 系统调用的输出)。
After a fork, every open file descriptor in the parent gets dup'ed, so any close after the fork won't affect either the parent or the child.
Unless, you're doing it not properly (i.e. not checking the output of the
fork()
system call).