gpt4 book ai didi

c++ - 与 fork 进程相关的问题

转载 作者:行者123 更新时间:2023-11-28 03:42:07 24 4
gpt4 key购买 nike

我正在制作一个服务器,我使用 fork() 来创建子进程,但我对此有疑问。这里有一些:

  1. 为什么需要关闭子进程中的主套接字和父进程中接受新连接的套接字? (接受新连接后)我认为套接字只是带有一些 id 的整数,用于访问某些系统范围对象中打开的套接字,这只能通过系统函数调用来接受。在那种情况下,fork 只会复制整数,但不会影响打开的套接字。
  2. 我已经检查并发现,如果我在类方法中创建一个进程,所有成员都会被复制。好吧,我发现它是编辑时复制,这是否意味着我的服务器类将被复制到每个使用非常量函数的子项中?我如何在所有这些进程之间共享一些内存(比如任务列表,每个 child 在 parent 从中读取内容时将一些东西放入其中)?我想 fork 不是正确的功能。什么是最好的方法?

附言我很确定我知道第二个问题的答案,即 clone(),但只是想确保它是正确的函数。

最佳答案

  1. Unix 中的套接字是文件描述符,它们确实是整数,如用户所见,但它们实际上是内核为每个进程维护的表的索引。在此表中,每个文件描述符 (FD) 指的是打开文件描述 (OFD),它们是在内核中维护的系统范围对象。当您执行 fork() 时,打开的文件描述符 是重复的,并且 child 和 parent 的都指向同一个 OFD。拥有两个指向同一个 OFD 的 FD 通常不是问题,但特别是对于套接字,它们可能会有微妙的问题,因为只有当您关闭所有引用它的 FD 时连接才会关闭。

  2. 您真的应该考虑使用线程(如果您使用线程,请不要关闭套接字!)。 clone 是 linux 系统调用,不能直接使用。您的替代方案是使用共享内存,但它有点复杂。

关于c++ - 与 fork 进程相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8823671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com