子プロセス終了で閉じてしまうmysqlコネクション
pcntl_fork()を利用して、子プロセスでファイル収集を行い、親プロセスがそのファイルを解析してDBへ登録するといった単純な2並列のプログラムを書いています。
ところが子プロセスが終了した時点でどうもmysqlのコネクションが切れてしまうようなのです。
以下は上記内容を再現した簡易コードです。
$connect = mysql_pconnect("localhost", "user", "password");
//parent
if ($pid = pcntl_fork()) {
// 本当はここで収集されたファイルを順次解析してDBに登録を行う。
sleep(5); // 子が先に終了するように時間差を。
mysql_query($query="use testdb",$session) || die(sprintf("%s : %s\n", $query, mysql_error()));
pcntl_wait($status);
//child
} else {
// 本当はここでファイルを収集する
sleep(1);
exit(0);
}
上記コードは以下のエラーを吐いて終了します。
use testdb : MySQL server has gone away
mysql_pconnectの代わりにmysql_connectを使ったり、mysql_queryの第二引数に$connectを与えても結果は変わりません。
子プロセスが終了してもmysqlとのコネクションを維持しておきたいのですが解決策はあるでしょうか。
ちなみにPHP CLIで実行しています。
OS: Linux
PHP 5.2.4
お礼
上のページを見てみたところ、思いのほか使いやすく、目的どおりのことができそうです。 JAVA自体初心者なので、周辺のページも含めてとても参考になりました。 ありがとうございました。