Моя проблема заключается в следующем. Я разветвляю процесс, чтобы ускорить время доступа к файлам на диске. Я храню любые данные из этих файлов в файле tmp на локальном столе. в идеале, после завершения всех процессов мне нужно получить доступ к этому файлу tmp и получить эти данные в массив. Затем я отключаю файл tmp, так как он больше не нужен. Моя проблема заключается в том, что кажется, что pcntl_wait()не ждет, пока все дочерние процессы не будут выполнены, прежде чем перейти к последнему набору операций. Так что я заканчиваю тем, что отвязываю этот файл до того, как какой-то случайный процесс может завершиться.
Я не могу найти надежного способа дождаться корректного завершения всех процессов, а затем получить доступ к своим данным.
$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);
пожалуйста, обратите внимание, что я опускаю много кода относительно того, что я на самом деле делаю, если нам нужно это опубликовать, это не проблема.