Hi,
We have a zimbra (4.5.5_GA_838) installation on RHEL 4 and after a while, we get a lot of java zombie processes hanging around:
zimbra 10339 6568 0 Jun12 ? 00:00:00 [java] <defunct>
zimbra 14581 6568 0 Jun12 ? 00:00:00 [java] <defunct>
zimbra 15254 6568 0 Jun12 ? 00:00:00 [java] <defunct>
zimbra 15822 6568 0 Jun12 ? 00:00:01 [java] <defunct>
The PPID is 6568 which in this case is zmmtaconfig. I checked the code and found out that catchSignal() is used to catch SIGCHLD signals which are ignored. I changed the code to the following:
And it fixed the problem, no more zombie processes. According to the perl documentation, another way to go about it would be to set the SIGCHLD handler to 'IGNORE' which would let perl cleanup child processes but in that case we wouldn't be able to log about them...HTML Code:sub catchSignal { my $sig = shift; if ($sig eq "CHLD") { while ((my $pid = waitpid(-1, WNOHANG)) > 0) { logMsg(2, "Reaping child pid '$pid'"); } return; } logMsg(3, "Shutting down. Received signal $sig"); exit 0; }
Ciao
Jean-Philippe Bouchard
Sitepak Inc.


LinkBack URL
About LinkBacks

