为什么在双叉中需要等待来删除僵尸进程?

波尔基

我不确定为什么我们需要在父进程中调用 wait() 来处理僵尸进程,而双叉应该处理它?如果仅 wait() 已经可以完成这项工作,为什么我们需要双叉?

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>

int main()
{
    pid_t pid;

    // fork first time
    pid = fork();

    if (pid == 0)
    {
        // double fork
        pid = fork();
        if (pid == 0)
        {
            printf("Grandchild pid : %d\n Child"
                   " pid : %d\n",
                   getpid(), getppid());
        }
        else
        {
            exit(0);
        }
    }

    else
    {
        wait(NULL);
        sleep(10);
    }
}
约翰·布林格

我不确定为什么我们需要在父进程中调用 wait() 来处理僵尸进程,而双叉应该处理它?如果仅 wait() 已经可以完成这项工作,为什么我们需要双叉?

您误解了双重fork成语的目的和用法。

背景

除了 pid 1 之外的每个进程在终止时都会变成僵尸。僵尸一直存在于进程表中,直到它通过wait-family 函数之一被收集。如果进程的父进程还活着,那么那是必须wait收集它的进程。否则,责任将转移到进程 1。作为进程 1 运行的程序的可行选择将非常有效地处理这些,因此您几乎永远不会看到正在等待进程 1 收集它们的僵尸。

加倍fork_

双倍fork的目的是让原始进程A创建一个进程,该进程将由进程 1 负责清理,尽管A继续运行。如果你愿意的话,火灾并忘记它的情况。这是通过ing立即成为所需进程Cfork的子B来完成的。然后进程B终止以将C的责任转移给进程 1(而不是进程A)。fork

这并不能免除进程Await对进程B的责任但是A可以wait立即执行该操作并且知道它不会延迟很长时间,而不是阻塞直到C终止,或者必须定期检查C的完成情况,或者无限期地让C成为僵尸,这将是如果A fork ed C直接的替代方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么需要等待协程?

来自分类Dev

为什么aiohttp响应的json()方法需要等待?

来自分类Linux

为什么存在僵尸进程?

来自分类Linux

僵尸进程删除,无需等待C

来自分类Dev

为什么要等待dart中的path_provider?

来自分类Dev

为什么在等待呼叫后需要等待呼叫(.NET Core 2.2)

来自分类Dev

为什么在使用异步等待语法时仍然需要等待while循环?

来自分类Python

需要等待同步功能中的功能

来自分类Dev

从Ubuntu 16.04升级到18.04.1:为什么需要等待几天?

来自分类Dev

如果需要等待,为什么回调被认为是异步的

来自分类Dev

使用Logbook和ZeroMQ,为什么我需要等待才能传递消息?

来自分类Dev

量角器,完成并期望,为什么我们需要等待?

来自分类Dev

为什么我应该等待response.read(),但是我不需要等待response.status?

来自分类Dev

删除僵尸进程

来自分类Dev

为什么起源进程在Qt-app中以僵尸身份开始。的Linux

来自分类Dev

什么是僵尸进程?

来自分类Dev

在异步生成器函数中是否需要等待?

来自分类Dev

为什么需要双指针来更改头部,而无需更改链接列表中的其他位置

来自分类Dev

为什么启动时会创建僵尸进程?

来自分类Dev

为什么我不收获僵尸进程?(CentOS Linux,Python)

来自分类Dev

我需要等待时间来设置新文件夹vbs吗?

来自分类Java

Java类-不要等待进程退出

来自分类Python

熊猫:为什么布尔索引后需要双括号来选择列

来自分类Dev

僵尸进程无需“等待”即可收割

来自分类Dev

为什么我们需要等待一段时间才能从UserPrincipal.GetAuthorizationGroups方法获取最新的组信息?

来自分类Linux

为什么不waitpid等待进程退出?

来自分类Dev

您是否需要等待异步方法?

来自分类Dev

需要等待heroku-connect SFID

来自分类Dev

我需要等待HTTP响应

Related 相关文章

  1. 1

    为什么需要等待协程?

  2. 2

    为什么aiohttp响应的json()方法需要等待?

  3. 3

    为什么存在僵尸进程?

  4. 4

    僵尸进程删除,无需等待C

  5. 5

    为什么要等待dart中的path_provider?

  6. 6

    为什么在等待呼叫后需要等待呼叫(.NET Core 2.2)

  7. 7

    为什么在使用异步等待语法时仍然需要等待while循环?

  8. 8

    需要等待同步功能中的功能

  9. 9

    从Ubuntu 16.04升级到18.04.1:为什么需要等待几天?

  10. 10

    如果需要等待,为什么回调被认为是异步的

  11. 11

    使用Logbook和ZeroMQ,为什么我需要等待才能传递消息?

  12. 12

    量角器,完成并期望,为什么我们需要等待?

  13. 13

    为什么我应该等待response.read(),但是我不需要等待response.status?

  14. 14

    删除僵尸进程

  15. 15

    为什么起源进程在Qt-app中以僵尸身份开始。的Linux

  16. 16

    什么是僵尸进程?

  17. 17

    在异步生成器函数中是否需要等待?

  18. 18

    为什么需要双指针来更改头部,而无需更改链接列表中的其他位置

  19. 19

    为什么启动时会创建僵尸进程?

  20. 20

    为什么我不收获僵尸进程?(CentOS Linux,Python)

  21. 21

    我需要等待时间来设置新文件夹vbs吗?

  22. 22

    Java类-不要等待进程退出

  23. 23

    熊猫:为什么布尔索引后需要双括号来选择列

  24. 24

    僵尸进程无需“等待”即可收割

  25. 25

    为什么我们需要等待一段时间才能从UserPrincipal.GetAuthorizationGroups方法获取最新的组信息?

  26. 26

    为什么不waitpid等待进程退出?

  27. 27

    您是否需要等待异步方法?

  28. 28

    需要等待heroku-connect SFID

  29. 29

    我需要等待HTTP响应

热门标签

归档