2

プロセスでダブルフォーク(フォーク、次に子フォーク、子を待つ、孫はinitによって処理される)を実行し、子が閉じた後、親で開いていたソケットから読み取ろうとしますフォークの前。プログラムを実行するたびに読み取りが失敗します。

メッセージは、ENOENT のエラー コードを返す sendto() を使用して送信されています。

これは機能するはずですか、それとも私は [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;
}

編集:余分なブラケットを削除し、インデントを修正し、再度コードとしてマークしました

4

0 に答える 0