Per Jessen schreef: > Waynn Lue wrote: > >> (Apologies for topposting, I'm on my blackberry). Hm, so you think >> exiting from the child thread causes the db resource to get reclaimed? >> > > Yeah, something like that. The connection is definitely closed when the > child exits. > I can confirm this. you definitely need to open a connection for each child process. if you require a db connection in the parent process, you should close it before forking (and then reopen it afterwards if you still need it). at least that's what I found I had to do when I ran into this. incidently my forking loop looks like this, very interested to know if Per can spot any obvious stupidity: $childProcs = array(); do { if (count($childProcs) <= $maxChildProcs) { $site = array_shift($sites); $pid = pcntl_fork(); } else { // stay as parent, no fork, try to reduce number of child processes $site = null; $pid = null; } switch (true) { case ($pid === -1): cronLog("error: (in {$thisScript}), cannot initialize worker process in order to run {$script} for {$site['name']}"); break; case ($pid === 0): // we are child $exit = 0; $output = array(); // do we want to exec? or maybe include? if ($doExec) { exec($script.' '.$site['id'], $output, $exit); } else { $output = inc($script); $output = explode("\n", $output); } if ($exit != 0) cronLog("error: (in {$thisScript}), {$script} reported an error ($exit) whilst processing for {$site['name']}",); foreach ($output as $line) cronLog($line); exit($exit); break; default: // we are parent $childProcs[] = $pid; do { $status = null; while (pcntl_wait($status, WNOHANG | WUNTRACED) < 1) usleep(50000); foreach ($childProcs as $k => $v) if (!posix_kill($v, 0)) // send signal 'zero' to check whether process is still 'up' unset($childProcs[ $k ]); $childProcs = array_values($childProcs); if (count($sites)) break; // more sites to run the given script for if (!count($childProcs)) break; // no more sites to run the given script for and all children are complete/dead } while (true); break; } if (!count($sites)) break; // nothing more to do usleep(50000); } while (true); > > /Per > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php