ожидание выхода всех pids в php

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

пожалуйста, обратите внимание, что я опускаю много кода относительно того, что я на самом деле делаю, если нам нужно это опубликовать, это не проблема.

5
задан au_stan 17 April 2012 в 20:43
поделиться