PHPでforkする方法(は結構めんどくさい)

以下のPHPプログラムを作成してプロセスのforkを試してみた。

このPHPプログラム(test.php)をコマンドライン($ php  test.php)とApache経由で実行してみた。結果は、

                                                         コマンドライン                     Apache経由

CentOS 6.5           成功          失敗

Ubuntu 12.04 LTS        失敗          失敗

Mac OS X Mountain Lion     失敗          失敗

 

ネットで調べると、pcntl系のライブラリはCGIPHPで実行しないといけないとのこと。また、PHPコンパイル時に『--enable-pcntl』オプション付きでコンパイルしないといけないらしい。つまりMacPHPはこのオプション付きでコンパイルされていないようだ。

<?php  phpinfo(); ?>で調べて見ると、Apache経由ではいずれのOSでもモジュール版のPHPが起動していた。一方、コマンドラインから実行するとCGI版が起動する。

だから、CentOSUbuntuPHPの設定で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;

}

?>