How does your shell temporarily block the SIGCHLD signal?
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
where the 'how' parameter should either be SIG_BLOCK or
SIG_UNBLOCK
set is a pointer to the set of signals to be blocked or
unblocked
and oldset is a pointer to a location to store the previous set of
signals that were blocked.