読者です 読者をやめる 読者になる 読者になる

[php]Test_mysqldというものができたけど、まだ問題があって悩んでいる件

Test_mysqldというものができました。
https://github.com/taiyoh/Test_mysqld-php

これはperlのTest::mysqldをPHPに移植したものです。
@taiyohさんが移植している途中のものを自分が進めてひと通り動くようにしました。
しかし、まだ実際には使っていません。まだこのモジュールにはちょっと問題があって、どうすればいいのかなぁと悩んでいる途中だからです。


例外でプログラムが止まると、デストラクタが呼び出されない?

Test::mysqldと同様にTest_mysqldでは、内部でforkしてexecで子プロセスをmysqldにしてます。
プログラム終了時は、Test_mysqldのデストラクタでmysqldにシグナルを送って終了させています。
しかし、以下のようなコードのように、例外でプログラムが終了するときに、デストラクタが呼び出されずに、mysqldが残ってしまいます。

<?php

// モジュール読み込み
require_once('Test_mysqld.php');

// 設定
$my_cnf = array('skip-networking' => '');
$opts   = array();

// mysqld起動
$mysqld = new Test_mysqld($my_cnf, $opts);

// 例外で終わる
throw new Exception();

例外でプログラムが終了しないように気をつけるようにするのはそうなんですが、テスト中のプログラムではやっぱ例外で終了しちゃうケースもある気がするのです。そのたびに、mysqldが残っちゃうのはやだなーと思うのです。

確実にmysqldを終了させる方法があるのでしょうか?