>
> > 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