phpでのforkの実現法

方法は2つある。

1.system関数 or exec関数を使う

<?php
system("/tmp/bg.php > /dev/null &")
?> 

ただし、この方法はあまりセキュアではなくソースコードを別ファイルに分けなければならない。


2.pcntl_fork関数を使う

<?php

$pid = pcntl_fork();
if ($pid == -1) {
     printf('fork できません\n', $pid);
} else if ($pid) {
     printf('親プロセス起動(%d)\n', $pid);
     pcntl_wait($status); // ゾンビプロセスから守る
     printf('親プロセス終了(%d)\n', $pid);
} else {
     printf('子プロセス起動(%d)\n', $pid);
     sleep(10);
     printf('子プロセス終了(%d)\n', $pid);
}
?> 

正当なやり方だが、PHPの標準拡張モジュールを追加する必要があり準備が面倒



個人的には後者の方がセキュアなので後者推奨。