double fork导致原始父级中的套接字中断

时间:2012-11-07 21:26:18

标签: c linux sockets fork

我做了一个双叉(fork,然后孩子再次分叉,我等待孩子,孙子由init处理)在一个过程中,在孩子关闭后我尝试从我打开的套接字读取在fork之前的父级中。每次运行程序时读取都会失败。

使用sendto()发送消息,该消息返回错误代码ENOENT。

这应该有效还是我[10]?

以下是函数中的代码:

uint8_t
upgrade(
        char *server,
        char *file)
{
    pid_t pid1, pid2;

    int status;

    if ((pid1 = fork()) < 0)
    {
        /* Fork error */
        log("FAILED: First fork() failed");
    }
    else if (pid1 == 0)
    {
        /* First child */
        if ((pid2 = fork()) < 0)
        {
            /* Fork error */
            log("FAILED: Second fork() failed");

            exit(0);
        }
        else if (pid2 == 0)
        {
            /*
                        execl("/usr/sbin/system_upgrade",
                                    "system_upgrade", NULL);
             */
            exit(0);
        }
        else
        {
            /* Second parent ie. First child
             * Note: Exit cleanly so that second child
             * gets reparented to init, and we avoid a zombie process */

            exit(0);
        }
    }
    else
    {
        /* First parent, wait for first child to exit */
        if (waitpid (pid1, &status, 0) != pid1)   
        {
            log("FAILED: waitpid() failed");
        }

    } /* FORK */

    return OK;
}

编辑:删除额外的括号,修复缩进,再次将其标记为代码

0 个答案:

没有答案