In article <5919.1597441...@jinx.noi.kre.to>, Robert Elz <k...@munnari.oz.au> wrote: > Date: Fri, 14 Aug 2020 20:01:18 +0200 > From: Edgar =?iso-8859-1?B?RnXf?= <e...@math.uni-bonn.de> > Message-ID: <20200814180117.gq61...@trav.math.uni-bonn.de> > > | 3. I don't see where POSIX defines or allows this, but given 2., I'm surely > | missing something. > >It is specified to work this way in POSIX, though right now I don't >have the time to go dig out exactly where. > >Setting SIGCHLD to SIG_IGN effectively means that you want to ignore >your children - they then don't report any exit status to their parent, >but simply vanish when they exit. Thus when the parent does a wait() >it has no children, and gets ECHLD.
They don't vanish, they get reparented to init(8) which then wakes up and reaps them. >Leave (or set) SIGCHLD to SIG_DFL and you don't get signals, but child >processes do report status to their parent. Catch SIGCHLD and you'll >get signalled when a child exits (I'm not sure if NetBSD guarantees one >signal delivery for each exited child or just a signal if there are >some unspecified number of exited children). > >The actions on an ignored SIGCHLD is SysV inherited behaviour, >Bell Labs (v7/32V) and CSRG BSD systems didn't act this way. Yup, I edded this: 1.199 (christos 30-Mar-05): #define P_CLDSIGIGN 0x00080000 /* Process is ignoring SIGCHLD */ christos