我花了几个小时和几天来找到为什么要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);
,那么您会看到所有孩子都将返回相同的结果(第一个由孩子计算的结果)
我不知道如何处理:(