tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: wait(2) and SIGCHLD



    Date:        Fri, 14 Aug 2020 20:01:18 +0200
    From:        Edgar =?iso-8859-1?B?RnXf?= <ef%math.uni-bonn.de@localhost>
    Message-ID:  <20200814180117.GQ61086%trav.math.uni-bonn.de@localhost>

  | 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.

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.

kre



Home | Main Index | Thread Index | Old Index