等待进程组时 waitpid() 无子进程错误

2024-04-09

编写我自己的玩具外壳,并在尝试实现作业控制时遇到了障碍。

我正在使用 setpgid 在子进程和父进程中设置子进程组。我的等待电话是:

pid = waitpid(-pid, &status, 0)

然而,waitpid 返回 -1 并且 perror 说“没有子进程”。然而,似乎每次都在等待。另外,当从 shell 运行时, ps 输出看起来是正确的。因为 psparent 的进程是 kbsh 就像我所期望的那样。

% ps -o pid,ppid,pgrp,session,tpgid,comm
Forking
In Parent: Setting process group to 20809 of process 20809 with setpgid
In Child Processes, pid of child process is 20809
in Child: Setting process group to 20809 of process 20809 with setpgid
Requesting that Process Group 20809 becomes the foreground process with tcsetpgrp
Waiting for job with process group 20809
  PID  PPID  PGRP  SESS TPGID COMMAND
12002 32573 12002 12002 20809 zsh
20808 12002 20808 12002 20809 kbsh
20809 20808 20809 12002 20809 ps
Wait Error: No child processes
Restoring Shell process group 20808 to forground

有人看到我做错了什么吗?如果需要的话可以发布更多代码...


我忽略了 waitpid 手册页中的 sigchld:

POSIX.1-2001 指定如果 处置SIGCHLD 设置为 SIG_IGN 或 SA_NOCLDWAIT 标志是 设置为 SIGCHLD(参见 sigaction(2)), 那么终止的孩子不会 成为僵尸并调用 wait() 或 waitpid() 将阻塞,直到所有 孩子们已经终止,然后 失败,errno 设置为 ECHILD。(这 原来的 POSIX 标准留下了 将 SIGCHLD 设置为的行为 SIG_IGN 未指定。)Linux 2.6 符合本规范。 然而,Linux 2.4(及更早版本)确实 不是:如果 wait() 或 waitpid() 调用是 当 SIGCHLD 被忽略时, 调用的行为就像 SIGCHLD 没有被忽略, 也就是说,该调用会阻塞,直到下一个 孩子终止然后返回 该子进程的进程 ID 和状态。

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

等待进程组时 waitpid() 无子进程错误 的相关文章

随机推荐

  • Mongoose Schema.update 不更新布尔值

    我尝试过更新其他字段 效果很好 我在 API 中使用的命令 User update email targetUser email set isAdmin true push log updated new Date function err
  • 如何在 Android 应用程序中访问 graph.windows.net Microsoft Azure Graph API?

    我已要求 IT 管理员添加一个名为EmployeeId以 Azure Active Directory 的目录扩展的形式 与我们的现场 AD 同步 当给定用户登录我的 Android 应用程序时 我试图检索该值 我已经关注了this htt
  • Cloud9 Watir/Selenium 测试

    我已经为一个简单的持续集成和交付系统设置了 Cloud9 和 Codeship 它非常适合开发我的网站 应用程序 有没有人能够在 Cloud9 IDE 中开发和运行基于浏览器的 Cucumber 测试 如果是这样 需要什么样的设置 附言 我
  • IIS6 ASP.NET 2.0 应用程序缓存 - 大量数据的数据存储选项和性能

    在 ASP NET 2 0 站点中IIS6我想将键 值对存储在应用程序缓存中 每个键始终是一个长度为 5 个字符的字符串 每个值都是一个长度为 15 250 个字符的字符串 使用场景是 每个网页请求都会查询一次缓存 如果键存在 则使用值 否
  • 如何重命名我的 asp.net 网页

    我的页面名称为 XYZ aspx 现在我想更改ABC aspx我应该怎么做 当我直接从解决方案资源管理器更改它时 它给了我一个错误 谁可以帮我这个事 谢谢 Smartdev ASP NET 文件通常由 1 3 个文件组成 具体取决于项目类型
  • iText5.1.0在文档中设置页眉和页脚[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用 servlet 来查看
  • 无需 MSI 文件即可卸载

    我经常遇到 Windows Installer 尝试卸载软件包的问题 但它抱怨 您尝试使用的功能所在的网络资源不可用 当原始 MSI 根本不可用时 是否有已知的方法可以卸载此类软件包 请注意 微软现在已经发布了一个官方工具来解决这些问题 并
  • 替换序列化数据中的类名

    我想在序列化数据流中将字符串 com oldpackage className 替换为 com newPackage className 该序列化数据从数据库中读取并在替换字符串后更新 我在做同样的事情时遇到了一些问题 如果您已经猜到了 这
  • appdeeplink Github .wellknown 文件夹无法识别

    I am adding app deep linking functionality in my app i followed as per applink assist i created well known folder in git
  • DELETE 请求正文的 RESTful 替代方案

    虽然HTTP 1 1 规范 http www w3 org Protocols rfc2616 rfc2616 html好像allow消息正文DELETE http www w3 org Protocols rfc2616 rfc2616
  • Android 4.x - 系统覆盖 - 无法捕获触摸事件

    我正在尝试为 Android 4 4 创建一个简单的覆盖应用程序 我找到了一个在屏幕上绘制按钮的示例 一切正常 但触摸事件侦听器未触发 import android app Service import android content In
  • Android 谷歌地图 v2 moveCamera 不起作用

    我正在尝试像这样控制谷歌地图相机 private void setUpMap Log e LOG TAG in setup method mMap setMyLocationEnabled true LatLng startingPoint
  • 异步 POST 请求 - R,使用 RCurl?

    我正在尝试从 R 向 REST API 发出异步请求 下面的 curl 命令说明了我需要传递给 api 的参数 我给你们提供了 linux curl 命令 希望这能让你们明白 curl v X POST https app example
  • 如何腌制或存储 Jupyter (IPython) 笔记本会话以供以后使用

    假设我正在 Jupyter Ipython 笔记本中进行更大的数据分析 并完成大量耗时的计算 然后 由于某种原因 我必须关闭jupyter本地服务器I 但我想稍后再返回进行分析 而不必再次进行所有耗时的计算 我喜欢喜欢做的是pickle或者
  • Grails 3 和 Spring @RequestMapping

    在 Grails 3 中 我尝试使用 spring security oauth 它通过 RequestMapping 提供了一些端点 我可以在 mbean 中看到路径已配置 但任何请求总是会命中 grails 并返回 404 这些请求似乎
  • 如何序列化 Jackson 的 JsonNode 对象?

    我正在用 memcached 替换内部缓存系统 但 memcached 客户端无法缓存JsonNode对象 因为它们没有实现Serializable 有什么方法可以实现序列化JsonNode目的 杰克逊提供吗Serializable相当于这
  • python中,按日期字段排序,字段有时可能为null

    我很难想出一个巧妙的方法来处理这种情况 我有从数据库读取回来的数据 我想按会计日期排序 然而 accoutingdate 有时可能为空 我目前正在做以下事情 results sorted results key operator itemg
  • Rails - 禁用选择中的选项(根据条件)

    我已经选择 f select category id categories html options gt class gt select box disabled gt true if category id 18 上面的代码显然返回一个
  • Highcharts 反转折线图在最小值处部分隐藏

    当使用具有最小值和最大值的反向折线图时 线条在最小值处部分隐藏 问题在于绘图画布恰好在最小值线处结束 当一条粗线只有一部分可见时 位于最小值线上方的部分将被隐藏 你可以看一个例子here http jsfiddle net DruGa 2
  • 等待进程组时 waitpid() 无子进程错误

    编写我自己的玩具外壳 并在尝试实现作业控制时遇到了障碍 我正在使用 setpgid 在子进程和父进程中设置子进程组 我的等待电话是 pid waitpid pid status 0 然而 waitpid 返回 1 并且 perror 说 没