$last_checkpoint = -1;
- function sigalrm_handler() {
- die("received SIGALRM, hang in feed update?\n");
- }
-
- function sigchld_handler($signal) {
+ function reap_children() {
global $children;
$tmp = array();
$children = $tmp;
- $running_jobs = count($children);
+ return count($tmp);
+ }
+
+ function sigalrm_handler() {
+ die("received SIGALRM, hang in feed update?\n");
+ }
+
+ function sigchld_handler($signal) {
+ $running_jobs = reap_children();
_debug("[SIGCHLD] jobs left: $running_jobs");
+
pcntl_waitpid(-1, $status, WNOHANG);
}
if ($last_checkpoint + SPAWN_INTERVAL < time()) {
+ reap_children();
+
for ($j = count($children); $j < MAX_JOBS; $j++) {
$pid = pcntl_fork();
if ($pid == -1) {