[so] Intrebari lab. 6

Lucian Adrian Grijincu lucian.grijincu at gmail.com
Fri Apr 3 00:16:00 EEST 2009


2009/4/2 Bogdan Sass <bogdan.sass at catc.ro>:
>   1. De ce in codul oferit pentru nohup (linux) se face un fork? Nu era
> suficient un ignore signal/exec? Care ar fi avantajele abordarii bazate pe
> fork?


>   2. La punctul 2 ( mkzombie/nozombie ), am incercat sa realizez o
> implementare bazata pe SA_NOCLDWAIT ( http://linux.die.net/man/2/sigaction
> ). Fara rezultat (copilul se transforma in continuare in zombie).
>   Am aflat ulterior ca pot obtine efectul dorit (nozombie :P ) ignorand
> semnalul SIGCHLD (handler=SIG_IGN).
>   Intrebarea este - care sunt diferentele dintre cele doua abordari? De ce a
> mai fost introdus NOCLDWAIT (din cate vad eu e "Linux 2.6 or above"), daca


Ignorarea explicită a lui SIGCHLD are comportamentul ăsta în Linux
pentru că așa au hotărât implementatorii: vezi aici sursa
http://lxr.linux.no/linux+v2.6.24/kernel/signal.c#L1487

Din sigaction(2):
       POSIX.1-1990  disallowed  setting  the  action  for SIGCHLD to SIG_IGN.
       POSIX.1-2001 allows this possibility, so that ignoring SIGCHLD  can  be
       used  to  prevent the creation of zombies (see wait(2)).  Nevertheless,
       the historical BSD and System V behaviors for ignoring SIGCHLD  differ,
       so that the only completely portable method of ensuring that terminated
       children do not become zombies is to catch the SIGCHLD signal and  per‐
       form a wait(2) or similar.

din wait(2):
       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  set‐
       ting  the disposition to SIG_IGN results in different treatment of zom‐
       bie process children.

NOCLDWAIT e definit în unul din standardele POSIX e menționat de ex. aici:
http://www.opengroup.org/onlinepubs/007908799/xsh/_exit.html

Tot din sigaction(2):
       POSIX.1-1990 only specified SA_NOCLDSTOP.  POSIX.1-2001 added SA_NOCLD‐
       WAIT, SA_RESETHAND, SA_NODEFER, and SA_SIGINFO.  Use  of  these  latter
       values  in  sa_flags  may be less portable in applications intended for
       older Unix implementations.

-- 
 .
..: Lucian


More information about the so mailing list