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()复制套接字所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)