我的问题是这样的。我正在分流一个进程,以便加速磁盘上文件的访问时间。我将来自这些文件的任何数据存储在本地台上的tmp文件中。理想情况下,在所有进程完成后,我需要访问该tmp文件并将数据存入数组。然后我断开tmp文件的链接,因为它不再需要。我的问题是,看起来似乎pcntl_wait()并没有等到所有子进程完成之后才进入最后一组操作。所以我最终在一些随机过程完成前断开该文件。等待所有的pid退出php
我似乎无法找到一个稳定的方式来等待所有进程干净地退出然后访问我的数据。
$numChild = 0;
$maxChild = 20; // max number of forked processes.
// get a list of "availableCabs"
foreach ($availableCabs as $cab) {
// fork the process
$pids[$numChild] = pcntl_fork();
if (!$pids[$numChild]) {
// do some work
exit(0);
} else {
$numChild++;
if ($numChild == $maxChild) {
pcntl_wait($status);
$numChild--;
}
} // end fork
}
// Below is where things fall apart. I need to be able to print the complete serialized data. but several child processes don't actually exit before i unlink the file.
$dataFile = fopen($pid, 'r');
while(($values = fgetcsv($dataFile,',')) !== FALSE) {
$fvalues[] = $values;
}
print serialize($fvalues);
fclose($dataFile);
unlink($file);
请注意,我留下了很多关于我在做什么的代码,如果我们需要发布那些问题。
你可以尝试通过每一个PID循环在'$的PID [$ numChild]'和http://php.net/pcntl_waitpid(这是从pcntl_wait不同)每个。 – 2012-04-17 20:47:32
所以我在'foreach()'循环之外测试? – 2012-04-17 20:49:35