linux – 防止fork()复制套接字

linux – 防止fork()复制套接字,第1张

概述我有以下情况(伪代码): function f: pid = fork() if pid == 0: exec to another long-running executable (no communication needed to that process) else: return "something" f通过XmlRpc++服务器 我有以下情况(伪代码):

function f:    pID = fork()    if pID == 0:        exec to another long-running executable (no communication needed to that process)    else:        return "something"

f通过XmlRpc++服务器公开.当通过XML-RPC调用该函数时,父进程在函数返回“something”后打印“done closing socket”.但只要子进程仍在运行,XML-RPC客户端就会挂起.当我终止子进程时,XML-RPC客户端正确完成RPC调用.

在我看来,我遇到了fork()将套接字描述符复制到子进程的问题(父类名为closesocket,但是孩子仍然拥有引用 – >连接仍然建立).我怎么能绕过这个呢?

编辑:我已经阅读了FD_CLOEXEC,但我不能强制所有描述符在exec上关闭?

解决方法 不,你不能强制所有文件描述符在exec上关闭.您需要在fork()之后循环遍历子节点中的所有不需要的文件描述符并关闭它们.不幸的是,没有一种简单,可移植的方法 – 通常的方法是使用getrlimit()来获取RliMIT_NOfile的当前值并从3循环到该数字,对每个候选者尝试close().

如果您很高兴只使用linux,则可以阅读/ proc / self / fd /目录以确定打开的文件描述符并关闭它们(0,1和2除外 – 它们应该单独保留或重新打开到/ dev /空值).

总结

以上是内存溢出为你收集整理的linux – 防止fork()复制套接字全部内容,希望文章能够帮你解决linux – 防止fork()复制套接字所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1025586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存