> > > 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). >> > > I thought that too, but this code seems to work, which seems to imply that > the child doesn't kill the existing db connection. > > $conn = mysql_connect($sharedAppsDbHost, $sharedAppsDbUser, > $sharedAppsDbPass, true); > > foreach ($things as $thing) { > temp($thing); > } > > function temp($thing) { > global $conn; > extract(getInfo($thing)); // this function call uses a shared db > connection > mysqlSelectDb($dbName, $conn); // dbName is a variable gotten from the > above call > $result = mysql_query("SELECT COUNT(*) FROM Users", > $conn); > $row = mysql_fetch_array($result, MYSQL_BOTH); > echo "$row[0]\n"; > $pid = pcntl_fork(); > if ($pid == -1) { > die("could not fork"); > } else if ($pid) { > // parent, return the child pid > echo "child pid $pid waiting\n"; > pcntl_waitpid($pid, $status, WNOHANG); > if (pcntl_wifexited($status)) { > echo "finished [$status] waiting\n"; > return; > } > } else { > echo "child sleeping\n"; > sleep(3); > echo "child done\n"; > exit; > } > } > > ============== > My main problem here is that I have a set of helper functions (getInfo is > one of them) that uses a global db connection that exists in that helper > script. Otherwise, I have to rewrite the function to create a new > connection every time, which I'd like not to. > > Waynn > Whoops, I spoke too soon, I think the sleep(3) causes the child not to exit before the parent. If instead I don't pass WNOHANG to the waitpid command, it does error out. So it looks like your theory is correct, and I still have that problem. I guess the only solution is to rewrite the functions to use a new db connection every time? Or maybe I should just sleep the child thread for long periods of time and hope the parent thread finishes in time (which admittedly seems really hacky)?