Параллельный запуск с popen. Проблема.

Тема в разделе "PHP", создана пользователем elcaste, 15 июл 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. elcaste

    elcaste

    Регистр.:
    30 ноя 2007
    Сообщения:
    322
    Симпатии:
    175
    Пытаюсь запустить параллельно несколько процессов. Все бы хорошо, но только скрипт ждет завершения предпоследнего запуска в цикле.

    т.е. запускаю:
    Код:
    <?php
      for ($i=0;$i<3;$i++){
          $handle = popen('cd /usr/local/www/apache22/data/launcher; /usr/local/bin/php ./some.php '.$i, "w");
      }
    ?>
    
    он по циклу запускает:

    some.php:
    Код:
    <?php
    $fp = fopen('test'.$argv[1], "a");
    for ($i=0;$i<10;$i++){
        fwrite($fp, 1);
        sleep(60);
    }
    ?>
    Результат: создается test0, test1 и все, ждет пока закончится цикл записи в test1 и только после этого начинает писАть в test2...
    Причем, если запускаю первый скрипт из дебаггера, то все нормально: он запускает три процесса и помирает.

    Что не так делаю?


    ЗЫ: pcntl использовать не могу, на хостинге отсутствует.
     
  2. gregzem

    gregzem

    Регистр.:
    21 окт 2007
    Сообщения:
    200
    Симпатии:
    63
    Может попробовать & в конце командной строки запуска добавить?
     
    elcaste нравится это.
  3. slik_jay

    slik_jay ^_^

    Регистр.:
    24 май 2008
    Сообщения:
    50
    Симпатии:
    27
    если на *никсах то можешь чтот подобное попробовать (я не тестировал, просто накинул пару строк с памяти)
    Код:
    <?php
    
    define("PROCESS_COUNT", 3);
    for($i=0; $i<PROCESS_COUNT; ++$i)
    {
        if(($pid = pcntl_fork()) == 0)
        {
            exit(child_main($i));
        }
    }
    
    function child_main($param)
    {
        $fp = fopen('test'.$param, "a");
        for ($i=0;$i<10;$i++){
            fwrite($fp, 1);
            sleep(60);
        }
        return 1;
    }
    
    ?>
     
  4. elcaste

    elcaste

    Регистр.:
    30 ноя 2007
    Сообщения:
    322
    Симпатии:
    175
    Я бы с удовольствием "пофоркал", но

    :)

    Добавлено через 10 минут
    Помогло. Еще и по разным указателям раскидал, теперь все отлично. Спасибо.
     
Статус темы:
Закрыта.