За последние 24 часа нас посетили 16195 программистов и 1553 робота. Сейчас ищут 863 программиста ...

Проблема с popen под виндой

Тема в разделе "Прочие вопросы по PHP", создана пользователем shurduk, 4 июн 2008.

  1. shurduk

    shurduk Активный пользователь

    С нами с:
    4 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Работает всё на винде
    Это парсер доменов по списку, который получает метаданные с сайтов, типа многопоточный. Есть главный скрипт который берёт конкретный домен из списка и запускает свободный трэд с нужными параметрами, через popen в цикле.
    Работает всё вроде неплохо, но переодически запущенные скрипты не закрываются в процессах... Но далеко не всегда, прошу заметить. Сами скрипты не виснут, это проверено, никаких бесконечных циклов там нет. Все скрипты выполняются до конца.
    Никак не могу решить проблему... Это глюк винды?

    вот кусок, запускающий процессы:
    while (!feof($handle)) {
    for($i = 1; $i <= $max_threads; $i++) {
    // проверяем нет ли для текущего треда файла-флага что он уже работает
    if (!file_exists($work_dir."/thread".$i.".run")) {
    // если нет, то читаем строку и запускаем
    $domain = trim(fgets($handle));
    $h = popen('start /b '.$php_dir.'/php C:/PHP_Parser/domain_list_parser_thread.php '.$i.' '.$domain.' '.$cat_id.' >> '.$work_dir.'thread'.$i.'.log', 'w');
    pclose($h);
    }
    }
    $sfp = fopen($work_marker, "w"); // сохраним текущую позицию в файле
    fputs($sfp, ftell($handle));
    fclose($sfp);
    usleep($pause); // тормознём на пол-секунды, всё равно быстрее треды не отработают.
    }
     
  2. shurduk

    shurduk Активный пользователь

    С нами с:
    4 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    В общем это действительно какой-то глюк винды... Поставил на соседний сервак, причём тоже 2к3, там всё в порядке.