フォークされた子供たちの間でメモリを共有する理由を見つけるのに何時間も何日も費やしphp
ましたが、フォークする前に親が関数にvarを設定すると、関数は常に子供に同じ結果を返すことがわかりました:~
new mytest;
class mytest{
var $t = 'Parent';
public function __construct(){
//$this->runChildProcess($i);
$pidsCount = 0;
for($i = 0; $i < 5; $i++) {
$pids[$pidsCount] = pcntl_fork();
if($pids[$pidsCount]) {
$this->t = 'Parent';
// i am the parent
$pidsCount++;
}
else {
$this->t = 'Enfant';
// i am the child
$this->runChildProcess($i);
exit();
}
}
for($i = 0; $i < $pidsCount; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
}
}
function runChildProcess($i) {
$a = rand(0,100)."\n";
echo $this->t.' : '.$a;
}
}
このサンプルを実行すると問題なく動作し、子は異なる数値を出力します。しかし、最初のコメントを外すと$this->runChildProcess($i);
、すべての子が同じ結果を返すことがわかります (子によって計算された最初の結果)。
私はそれに対処する方法がわかりません:(