function callback($id) { global $num_runs; global $dsn_map; $db_map = array(); $db_map[master] =& MDB2::connect($dsn_map[master]); if (PEAR::isERROR($db_map[master])) { die($db_map[master]->getMessage()); } if (is_array($dsn_map[slave])) { foreach ($dsn_map[slave] as $dsn_slave) { $db_slave =& MDB2::connect($dsn_slave); if (PEAR::isERROR($db_slave)) { die($db_slave->getMessage()); } $db_map[slave][] = $db_slave; } } $cnt = 0; $times = array(); // wait for the parent to HUP me pcntl_signal(SIGHUP, create_function('', 'return 1;')); sleep(600); while ($cnt < $num_runs) { $t0 = microtime(true); do_task($db_map); $t1 = microtime(true) - $t0; $times[] = $t1; $cnt++; } // cleanup $db_map[master]->disconnect; if (is_array($db_map[slave])) { foreach ($db_map[slave] as $db_slave) { $db_slave->disconnect; } } $num = count($times); $tot = array_sum($times); $avg = $tot / $num; $r = array($id, $num, min($times), max($times), $avg, $tot); return $r; }