Well you were definitely on the right track regarding other apache
modules being the problem.
For future reference, I had PHP's libphp5.so built with
--enable-sigchild, which causes PHP to implement its own sigchild
handler. General googling seemed to suggest that this option was
necessary when building Oracle support into PHP, since otherwise zombie
processes would build up.
But I tried rebuilding PHP without --enable-sigchild, and though I am
building in Oracle support, limited testing has not revealed any zombie
processes hanging around after Oracle use. So I'm going to try it that
way for a while and keep an eye on it.
Meanwhile, the good news is that if I back out my patch and restore the
subversion code to vanilla 1.5.2, it works fine without producing any of
the 'no child processes' errors.
So thanks very much for the tip.
Since I have seen other scattered reports of this problem from googling,
I would like to suggest that this information make it into a FAQ, as a
possible/probable cause of this problem: e.g.,
Q: Why am I getting "Error waiting for process '<hook-name>': No child
A: You may have another apache module that is causing SIGCHLD signals to
be ignored (i.e., setting SIGCHLD to SIG_IGN), is reading the status of
all apache child processes (e.g., waitpid(-1)), or has implemented their
own SIGCHLD handler. One way the latter can happen is to have built PHP
with the --enable-sigchild configure option.
Computational Science and Engineering Support (CSES)
Academic Services Department
Office of Information Technology
> -----Original Message-----
> From: Philip Martin [mailto:philip_at_codematters.co.uk]
> Sent: Friday, December 12, 2008 6:31 PM
> To: Dennis McRitchie
> Cc: dev_at_subversion.tigris.org
> Subject: Re: Intermittent error running hooks: No child processes
> Dennis McRitchie <dmcr_at_Princeton.EDU> writes:
> > Note that apr_proc_wait() only ignores the EINTR error, and so will
> > return ECHILD if the specified process has completed execution
> > waitpid() is called. Since this was a race condition, the error
> > sometimes happened, and sometimes did not.
> It's not normally a race because the child should become a zombie
> until waitpid is called. A race could occur if some other apache
> module was setting SIGCHLD to SIG_IGN or calling waitpid(-1), but
> either of those would make that module a bit unfriendly. Are you
> using any other apache modules?
Received on 2008-12-17 21:43:42 CET