gpt4 book ai didi

c++ - 如何在不继承句柄的情况下 fork 进程?

转载 作者:太空狗 更新时间:2023-10-29 19:53:33 34 4
gpt4 key购买 nike

在我的 Mac 上运行的 C/C++ 服务器应用程序( Darwin 内核版本 10.4.0)中,我正在 fork 子进程并希望这些子进程不继承服务器。似乎默认情况下所有句柄都被继承,甚至更多,netstat 显示子进程正在监听服务器的端口。我该怎么做这种 fork ?

最佳答案

通常,在 fork() 之后但在 exec() 之前一个做getrlimit(RLIMIT_NOFILE, fds);然后关闭所有低于 fds 的文件描述符.

此外,close-on-exec可以使用 fcntl() 在文件描述符上设置,以便它们在 exec() 上自动关闭.然而,这不是线程安全的,因为另一个线程可以 fork()在这个线程打开一个新的文件描述符之后但在它设置 close-on-exec 之前旗帜。

在 Linux 上,通过添加 O_CLOEXEC 解决了这个问题。标记为 open() 等函数这样就不需要额外的调用来设置 close-on-exec旗帜。

关于c++ - 如何在不继承句柄的情况下 fork 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053150/

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