僵尸进程的父进程终止后会发生什么?

2024-03-13

我只是好奇,如果僵尸进程的父进程不关心等待它,会发生什么。

假设,我们有一个父母和一个孩子。子进程先于父进程终止。

来自APUE:

内核为每个终止进程保留少量信息......最少
该信息包括进程 ID、进程的终止状态......

家长需要使用以下方式获取此信息waitpid().
但是,如果父进程不等待子进程就退出,会发生什么:

内核是否删除了这些信息(当然没有用)?
或者,它一直在收集这些垃圾?
这个实现具体吗?
或者,有没有标准的方法来处理这种情况?


孤儿进程自动被采用init其中有一个标准SIGCHLD仅丢弃死进程的任何退出状态的处理程序。

在你的情况下,如果僵尸进程的父进程死亡,僵尸孤儿将被 init 收养并清理。

下面的代码对此进行了测试:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>


int main() {
    pid_t child_pid;
    if (child_pid = fork()) { // fork a child, child will exit straight away
        char name[128];
        sprintf(name, "/proc/%d/stat", child_pid);
        char line[2048];

        // read childs /proc/pid/stat, field 3 will give its status
        FILE * fp = fopen(name, "r");

        while (fgets(line, sizeof(line), fp))
            puts(line);

        fclose(fp);

        usleep(5000000);

        // by now the child will have exited for sure, repeat
        fp = fopen(name, "r");

        while (fgets(line, sizeof(line), fp))
            puts(line);

        fclose(fp);

        // make another child to repeat the process and exit the parent
        if (!fork()) {
            usleep(5000000);
            // both parent and child will have exited by now

            fp = fopen(name, "r");

            // this should fail because init has already cleaned up the child
            if (!fp) {
                perror("fopen");
                return -1;
            }

            while (fgets(line, sizeof(line), fp))
                puts(line);

            fclose(fp);
        }

    }

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

僵尸进程的父进程终止后会发生什么? 的相关文章

  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla
  • 如何从对Web服务发出的请求中获取客户端IP地址

    我的 IIS 中托管有一个 Web 服务 当客户端直接使用我的服务时 我需要找出客户端 IP 地址 like http MyIpAddress MyApplication MyWebServiceClass asmx http MyIpAd
  • 如何在 Asp.Net Core 6 中向类型化 HttpClient 添加承载令牌身份验证

    我正在尝试使用 ASP Net Core 6 设置一个 Web api 以便用户可以到达我的端点 然后我使用特权帐户在幕后的 D365 中执行一些工作 我正在使用类型化的 HTTP 客户端 但我不确定如何插入承载身份验证 以便来自该客户端的
  • ASP.NET 如何在 Web API 中读取多部分表单数据?

    我将多部分表单数据发送到我的 Web API 如下所示 string example my string HttpContent stringContent new StringContent example HttpContent fil
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • C# 中不区分大小写的替换不使用正则表达式?

    有没有一种方法可以在不使用 C 中的正则表达式的情况下对字符串进行不区分大小写的替换 像这样的东西 string x Hello x x Replace hello hello world 你可以尝试类似的东西 string str Hel
  • VS C# 中的依赖地狱,找不到依赖项

    我创建了一个图表 C 库 我们称之为chartlibrary 它本身依赖于多个第三方 dll 文件 在另一个可执行项目中 我们称之为chartuser 我参考了chartlibrary项目 两个项目位于 Visual Studio 中的同一
  • 这个元组创建习惯有名字吗?

    On the 增加邮件列表 http lists boost org Archives boost 2014 06 214213 php LouisDionne 最近发布了以下创建类似元组的实体的巧妙技巧 include
  • C# SignalR 异常 - 连接在收到调用结果之前开始重新连接

    我正在开发 2 个应用程序 第一个是 C 控制台应用程序 另一个是 Asp net Web 应用程序 我正在使用 SignalR 连接两者 这是我的 C 控制台应用程序 客户端 public class RoboHub public sta
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • C# 从今天起 30 天

    我需要我的应用程序从今天起 30 天后过期 我会将当前日期存储在应用程序配置中 如何检查应用程序是否已过期 我不介意用户是否将时钟调回来并且应用程序可以正常工作 用户太愚蠢而不会这样做 if appmode Trial string dat
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • 如何使用 MongoDB 实现 ASP.NET Core 3.1 Identity?

    是一个 API 用于简化后端和逻辑代码来管理用户 密码 个人资料数据 角色 声明 令牌 电子邮件确认等 对于 Visual Studio 来说 支撑脚手架 https learn microsoft com en us aspnet cor
  • C# XML 反序列化。将节点中的所有内部文本读取到字符串属性中

    我目前正在尝试修改我的类 以便我的模型上的文本属性包含某个节点的所有内部文本 text node 给我带来问题的 xml 示例是
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • 智能感知不显示评论

    如果我在 Visual Studio 2010 中输入类似的内容数据集1 我得到所有可用方法和属性的列表 智能感知 这很好用 但是 如果我在此列表中选择一个方法或属性 我不会得到 if 的描述 例如 如果我有类似的东西 public cla
  • 查找文本文件中每行的行大小

    如何计算每行中的字符或数字数量 是否有类似 EOF 的东西更像是行尾 您可以遍历行中的每个字符并不断增加计数器直到行尾 n 遇到 确保以文本模式打开文件 r 而不是二进制模式 rb 否则流不会自动将不同平台的行结束序列转换为 n 人物 这是
  • 使用 ImageResizer 获取图像尺寸的最佳方法

    我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传时使用 ImageResizer 调整文件大小 我在文档中看到我不应该使用 System Drawing 但我无法找出任何其他获取图像尺寸的方法 尺寸是来自原始图像还是调整大小的
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐

  • Web 应用程序 - 显示月份中日期的滑块功能

    对于学校项目 我们必须构建一个网络应用程序 我将创建一些东西 让人们可以跟踪他们的课程 家庭作业和空闲时间 计划表 日历 我在这里听起来真的很蹩脚 但是嘿 我累了 英语不是我的母语 我将在 CodeIgniter 中处理 PHP 逻辑 并结
  • ssh2节点js sftp协议错误握手失败

    你好 我有一个小问题 我开发了一个带有节点js的脚本sftp客户端 它连接到sftp服务器并抓取一些文件 我用本地服务器测试了它的工作 但是当我尝试将它与生产服务器一起使用时 我收到了这个错误 错误 握手失败 没有匹配的密钥交换算法 我已经
  • 无法联系到会员

    这是我用于显示角色成员的代码 但是 当我为有很多成员的角色调用此命令时 它只返回我的名字 我该如何修复它 V12 let role if message mentions roles first message guild roles ca
  • 使用升压条件变量

    我正在设计一个异步记录器类 如下所示 但是 不确定我是否以正确的方式使用升压条件变量 有人可以对此发表评论吗 这里的processLogEntry方法是一个线程函数 我在这里使用boost void LogWriter stopThread
  • 当我更新我的 sqlite 核心数据存储时,如何避免出现“SQL 执行期间错误:约束失败”?

    我们的应用程序允许用户从 API 提供的列表中选择位置 该列表很少更新 并且仅通过添加项目来更新 因此应用程序不会每次都访问 API 而是在 Core Data sqlite 存储中提供快照 我们希望它定期更新列表 执行此操作的代码如下所示
  • gcc 不匹配标签选项给出“无法识别的命令行选项”

    我试图激活该选项 Wmismatched tags在 gcc 上 检测不一致的类 结构声明 这可能在使用前向声明时发生 但在 Ubuntu 上我得到 c error unrecognized command line option Wmis
  • “替换”功能示例

    我没有找到该项目的帮助页面replace函数从base包很helpful 最糟糕的是 它没有可以帮助理解其工作原理的示例 您能解释一下如何使用它吗 举一两个例子就太好了 如果您查看该函数 通过在控制台中输入其名称 您会发现它只是一个简单的函
  • 我想仅为特定资源运行 terraform

    运行 terraform 并等待需要很长时间 所以我想运行它来排除执行时间最长的rds 或者我只想运行 ec2 资源 有没有办法在地形中做这样的事情 您可以使用 target resource https www terraform io
  • 为什么 DirectFB 没有在 GNU/Linux 中得到更广泛的应用?是否存在 X11 中不存在的严重限制?

    据我了解 DirectFB为多种显卡提供硬件加速 此外 它比 X11 更小 更快 并且占用的内存更少 那么 为什么它没有比现在更主流呢 我真正不确定的是 常见的 GTK Qt 程序是否需要移植到它 在 DirectFB 网站上 有一个将 F
  • 带有 JDBC 准备语句的字符串中的圆括号

    这是我的 Java JDBC 代码 例如修改和简化的 ps connection prepareStatement SELECT a b c FROM mytable WHERE category ps setString 1 my sup
  • C语言数据类型算术规则

    在 C 编程中 如果我在下面的等式中使用变量 k X Y n 其中 exp 是数学常数 e 提升到 pi 3 14159 j sqrt 1 并且这些变量都被声明为 64b 双精度浮点数 其中 X 是复数 输出的结果也将是这种数据类型 out
  • Angular 2 悬停事件

    在新的Angular2框架 有谁知道像事件一样进行悬停的正确方法吗 In Angular1有ng Mouseover 但这似乎并没有被延续下来 我浏览了文档但没有发现任何内容 如果你想在任何 HTML 元素上执行类似悬停的事件 那么你可以这
  • C# 查找解决方案中的所有测试

    我是否可以使用任何技术来查找解决方案中注释为测试的所有测试 TestMethod Fact Theory 语境 我对这一切都很陌生 但正在尝试制定持续部署策略 我想在发布过程期间 之后找到并运行解决方案中的所有测试 这些不是依赖于构建的单元
  • 有多少 WebGL 内存可用?当我用完时会发生什么?

    GPU 内存是有限的 通常比 JS 堆大小等更有限 诸如大量高分辨率图像之类的东西可能会填满内存 而且它是共享资源 因此其他应用程序可能会使用大量内存 在 OpenGL 中 我可以查询可用内存 WebGL 有没有办法做同样的事情 我怎样才能
  • 在回收器视图上创建上下文菜单时,menuInfo 为 null

    我试图在回收器视图中单击项目时显示上下文菜单 并选择呼叫姓名被单击的人 但我无法检索电话号码 因为 getMenuInfo 不起作用 因为我在 onCreateContextMenu 的 contextMenuInfo 中得到 null 我
  • 在 C++ 中打印星号“三角形”

    我想制作一个打印此类输出的通用代码 这意味着用户可以输入任何值 整体 for 5 and for 3 这是我做的 但它打印出直角三角形 任何帮助 提前致谢 include
  • 如何避免在我的应用程序启动时中断已在播放的音频?

    我有一个应用程序需要使用AVAudioSessionCategoryPlayback为了在设备锁定或我的应用程序在后台时播放声音 这是一个闹钟功能 所以我还需要在 UIBackgroundModes 列表中设置 音频 键 我已将以下代码放入
  • 将事件处理程序附加到代码生成的数据模板

    我有一个相关问题this one https stackoverflow com questions 59451 creating a silverlight datatemplate in code 我正在尝试将事件附加到我的 Stack
  • Playframework 和 Twitter 流 API

    如何从 Twitter Streaming API POST 状态 过滤器读取响应数据 我已建立连接并收到 200 状态代码 但我不知道如何阅读推文 我只想在推文出现时将其打印出来 ws url url sign OAuthCalculat
  • 僵尸进程的父进程终止后会发生什么?

    我只是好奇 如果僵尸进程的父进程不关心等待它 会发生什么 假设 我们有一个父母和一个孩子 子进程先于父进程终止 来自APUE 内核为每个终止进程保留少量信息 最少该信息包括进程 ID 进程的终止状态 家长需要使用以下方式获取此信息waitp