Hirdetés

Új hozzászólás Aktív témák

  • Jester01
    veterán

    koszonom, igy mar ertheto.

    kozben tovabb olvasva talaltam meg egy erdekeset:
    program elejen van egy ilyen:
    signal(SIGCHLD, SIG_IGN);
    (ha jol tudom ez a default beallitas..)

    aztan kesobb ez:

    int pid = fork();
    if (!pid) {
    /* ... */
    exit(1);
    }
    /*
    * Yeah, we set CSIGCHLD to SIG_IGN, so this should
    * never even succeed reliably anyway, but at least
    * we'll wait for the child to exit, and not have
    * potentially lots of children outstanding.
    */
    if (pid > 0) {
    int status;
    waitpid(pid, &status, 0);
    }

    itt ismet a kommentar amit nem ertek.
    azt tudom, hogy ha fork()-kal egy uj processzt letrehozunk, akkor az addig el (zombikent) amig a szulo (vagy ha mar az nincs akkor az init) meg nem hivja a wait()-et. ez itt megtortenik, nem ertem mi a gond a szerzo szerint

    mod: miert lettem en is OFF? en nem akartam

    man waitpid

    POSIX.1-2001 specifies that if the disposition of SIGCHLD is set to SIG_IGN or the SA_NOCLDWAIT flag is set for
    SIGCHLD (see sigaction(2)), then children that terminate do not become zombies and a call to wait() or waitpid() will
    block until all children have terminated, and then fail with errno set to ECHILD. (The original POSIX standard left
    the behavior of setting SIGCHLD to SIG_IGN unspecified. Note that even though the default disposition of SIGCHLD is
    "ignore", explicitly setting the disposition to SIG_IGN results in different treatment of zombie process children.)

    Tehát a 2001-es POSIX szabvány szerint a signal miatt nem lesznek zombik, a waitpid pedig az összes gyereket bevárja és aztán hibát dob (vagyis nem adja vissza a status-t). Más szabványú implementáció esetén még a signal ellenére is szükséges lehet a waitpid a zombik elkerülésére.

Új hozzászólás Aktív témák