防止 fork() 复制套接字

2024-03-23

我有以下情况(伪代码):

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

f暴露在XmlRpc++ http://sourceforge.net/projects/xmlrpcpp/服务器。当通过 XML-RPC 调用该函数时,父进程在函数返回“something”后打印“done opening socket”。但只要子进程仍在运行,XML-RPC 客户端就会挂起。当我终止子进程时,XML-RPC 客户端正确完成 RPC 调用。

在我看来,我遇到了问题fork()将套接字描述符复制到子进程(父进程称为closesocket但子进程仍然拥有引用 -> 连接仍然建立)。我怎样才能规避这个问题?

EDIT:我读到FD_CLOEXEC已经,但我不能force所有要关闭的描述符exec?


不,您不能强制在 exec 上关闭所有文件描述符。您需要在子级中循环所有不需要的文件描述符fork()并关闭它们。不幸的是,没有一种简单、便携的方法可以做到这一点 - 通常的方法是使用getrlimit()获取当前值RLIMIT_NOFILE并从 3 循环到该数字,尝试close()关于每个候选人。

如果您愿意只使用 Linux,您可以阅读/proc/self/fd/目录来确定打开的文件描述符并关闭它们(0、1 和 2 除外 - 应将其保留或重新打开/dev/null).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 fork() 复制套接字 的相关文章

  • 在 LINUX 上使用 Python 连接到 OLAP 多维数据集

    我知道如何在 Windows 上使用 Python 连接到 MS OLAP 多维数据集 嗯 至少有一种方法 通常我使用 win32py 包并调用 COM 对象进行连接 import win32com client connection wi
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 同步 I/O 是否会使线程繁忙?

    假设我正在同步 I O 套接字上执行 I O 该套接字已准备好read or write手术 这意味着调用线程不会在操作上被阻塞 无论非阻塞 SOCK NONBLOCK 套接字的阻塞性质 但以下事情我不清楚 实际转移何时发生 当套接字标记为
  • 序列化是通过套接字发送数据的最佳选择吗?

    有人告诉我 序列化不是通过套接字发送数据的最佳方法 但他们说他们在一本书上读过一次 并且不确定更好的方法 因为他们以前没有真正做过网络 那么序列化是最好的方法还是有更好的方法 如果这有很大的不同的话 这也是一个游戏 通过搜索有关通过它发送对
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 如何强制关闭 TcpListener

    我有一个通过 tcpListener 进行通信的服务 问题是当用户重新启动服务时 抛出 地址已在使用 异常 并且服务在几分钟左右无法启动 有没有办法告诉系统终止旧连接 以便我可以打开一个新连接 我不能只使用随机端口 因为服务无法通知客户端端
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • Ruby on Rails:如何使用 TCP 套接字连接 GPS 设备

    ruby 2 3 0p0 2015 12 25 修订版 53290 x86 64 linux 轨道 4 2 4 我正在使用 cloud9 IDE 和 webrick 服务器 我的项目是实时跟踪GPS 我想使用TCP连接与GPS跟踪设备进行通
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh

随机推荐

  • 避免在自定义交叉过滤器归约函数中进行多次求和

    这个问题是由于创建过程中遇到的一些困难而产生的crossfilter数据集 特别是如何对不同维度进行分组并计算派生值 最终目标是拥有一批dc js使用维度和组的图表 小提琴示例https jsfiddle net raino01r 0vjt
  • 用户日期时间设置为 GMT,如何将日期转换为其本地化设置?

    在我的用户设置中 我有一个下拉菜单 其中包含所有 GMT 日期供用户选择 在 C 中 如何将数据库中存储的日期时间转换为 GMT 时间 数据库中存储的时间为服务器时间 对于 NET 3 5 您可以将系统时区标识符与用户一起存储 您可以从Ti
  • 浏览器如何处理高度和宽度的非整数值?

    当浏览器给出的元素的宽度和高度不是整数值时 它们如何处理它们 尤其 非整数值在什么阶段进行四舍五入 它们是四舍五入到最接近的整数 还是截断它们 当容器的子元素具有非整数尺寸时 是否会出现子元素长度或高度之和不等于父元素的内部宽度 高度的情况
  • 显示 UILabel * 秒;除了 NSTimer 之外还有其他方法吗?

    是否有其他方式显示对象 按钮 其他内容 例如 3 秒而不是 NSTimer 我可以使用动画来做到这一点吗 您可以使用 performSelector withObject afterDelay 尽管它内部使用了一个计时器 theLabel
  • 获取 NSTextField 内容以缩放

    我怎样才能让文本比例适合我给它的边界 我过去也做过类似的事情 void calcFontSizeToFitRect NSRect r float targetWidth r size width xMargin float targetHe
  • C++ 按升序打印文件名

    我正在使用以下代码来迭代目录中的文件 该目录中的所有文件都有编号 每个文件都有唯一的编号 下面的代码成功打印出目录中的所有文件 但不是按升序排列 它完全随机出现 并且有一个文件是重复的 我找不到另一种打印文件或按升序打印文件的方法 我确实需
  • C# Xamarin Forms - 执行任务,超时

    和其他许多人一样 我需要编写一个返回任务的函数 并且我希望该任务在一段时间后自动超时 初始代码如下所示 class MyClass TaskCompletionSource
  • 按 nginx 中的位置提供 pdf 文件

    我如何提供文件 webapps app static downloads privacy policy pdf 按地址 https my site net privacy 我尝试在 nginx 中使用位置 但这不起作用 location p
  • Dropwizard ExceptionMapper:验证原始标头字段

    有谁知道如何从请求中获取原始标头字段 我想验证客户端是否会收到 html 或只是纯 文本响应 我可以在异常映射器的 toResponse 方法中获取此字段吗 我像这篇文章中一样创建了异常映射器 http gary rowe com agil
  • 使用温莎城堡解析 HttpControllerContext

    In the ASP NET Web API http www asp net web api HttpControllerContext实例提供了很多有关当前环境的信息 包括当前请求的URI 如果服务依赖于此类信息 例如请求 URI 则应
  • 在 Windows 上使用 Python 3.7 安装 pycairo

    我正在尝试安装 pycairo 尽管我在互联网上找到了这些内容 但我无法安装它 我确实 pip install pycairo 但它要求我安装 Visual Basic Build Tool 我做到了 但当时不起作用 我尝试了在网上找到的很
  • C++编译引入错误

    我在 Visual Studio 2010 中有一个多线程 C windows 项目 它使用 Qt 5 1 1 和 OpenCV 2 4 8 当我构建它时Debug模式一切运行正常 但是当我构建它时Release模式下程序崩溃 两种配置几乎
  • Keycloak/Undertow/JBoss-CLI - 从环境变量设置“web-context”

    我对 Wildfly Undertow 和 JBoss CLI 设置 Keycloak 的 Web 上下文有疑问 环境变量似乎并未在 undertow 本身中得到解决 但其他环境变量似乎已得到解决 我创建了以下 CLI 脚本 subsyst
  • Spring MVC 中的 PropertyPlaceholderConfigurer

    我在我的项目中使用 Spring MVC 我在中定义了详细信息web xml像这样
  • 对 mysql 中的结果进行排名(mysql 相当于 oracle 中的“dense_rank()”或“row_number()”函数)

    以下是样本数据 dept id salary 10 10000 10 20000 10 20000 10 30000 20 50000 20 60000 我想对部门 ID 进行分组 然后按升序生成工资的排名值 输出应如下所示 dept id
  • 如何获得 Rails 路线以将扩展保留为 id 的一部分?

    我定义了以下路线 map resources images only gt index new destroy 当我做一个rake routes我得到以下信息 image DELETE images id format action gt
  • ServiceStack.DataAnnotations 缺少属性定义?

    我正在尝试使用 ServiceStack DataAnnotations 中的 ServiceStack 属性装饰器 但是当我在 MSVS 对象浏览器中查看 ServiceStack DataAnnotations 命名空间时 只有以下类型
  • 为所有测试配置一次 jest 超时

    根据文档 可以使用以下命令将默认异步超时从 5000ms 增加玩笑对象 https jestjs io docs en jest object 更具体地说 通过使用玩笑 settimeout 超时 https jestjs io docs
  • 如何过滤 django-taggit 顶部标签

    假设您有一个数据库 其中包含在 Django 应用程序后面运行的 User 对象 你想使用django taggit标记用户对象 以便您可以使用一些方便的过滤来检索子组 此外 您还有一个仪表板 您希望在其中显示有关已用标签的有趣统计信息 以
  • 防止 fork() 复制套接字

    我有以下情况 伪代码 function f pid fork if pid 0 exec to another long running executable no communication needed to that process