PHPでforkする方法(は結構めんどくさい)
以下のPHPプログラムを作成してプロセスのforkを試してみた。
このPHPプログラム(test.php)をコマンドライン($ php test.php)とApache経由で実行してみた。結果は、
ネットで調べると、pcntl系のライブラリはCGI版PHPで実行しないといけないとのこと。また、PHPのコンパイル時に『--enable-pcntl』オプション付きでコンパイルしないといけないらしい。つまりMacのPHPはこのオプション付きでコンパイルされていないようだ。
<?php phpinfo(); ?>で調べて見ると、Apache経由ではいずれのOSでもモジュール版のPHPが起動していた。一方、コマンドラインから実行するとCGI版が起動する。
だから、CentOSとUbuntuはPHPの設定でCGI版を使うようにすれば、うまくいくはず。
なんだけど、設定が面倒そうだったので、また後日暇なときでもやってみよう。
<?php
echo "start.....\n";
$pid = pcntl_fork();
if ($pid == -1) {
die('fork できません');
} else if ($pid) {
// 親プロセスの場合
pcntl_wait($status); // ゾンビプロセスから守る
echo "parent end\n";
exit;
} else {
// 子プロセスの場合
sleep(4);
echo "child end\n";
$cmd = "pwd";
system($cmd, $arr);
var_dump($arr);
exit;
}
?>