Многопоточность

Redwind

Новичок
Многопоточность

Господа! Появилась задача быстро проверить proxy на работоспособность. Я сдалал checker proxy написал, но например бывают proxy, которые стопорят работу скрипта (обычный цикл - каждый раз проверяет следущее proxy).
Пришол к тому, что надо использовать exec() или system() - (материнский скрипт запускает кучу дочерних процессов). Как применить exec() или system(), чтобы скрипт работал под виндами и юниксом(нужна гибкость скрипта, чтобы не зависеть от платформы) без открывания окон (у меня на винде материнский скрипт открывает кучу окон браузера, что неприемлемо).

-~{}~ 09.04.06 23:40:

Мне необходимо запустить дочернрий скрипт с помощью exec() или system().
Дайте пожалуйста пример кода exec() и system() для платформ windows и linux.

P.S. Php установлен как модуль apache
 

Asafchik

Новичок
http://ru.php.net/manual/ru/function.system.php
http://ru.php.net/manual/ru/function.exec.php
Всё чем могу помочь =(
Может для дочерних использовать крон?
 

Redwind

Новичок
Я мануал прочитал перед тем как сюда постить. Там я не видел кода, показывающий работу с разными платформами(для Win и Nix).
Покажите код плиз если есть у кого

Asafchik

А как можно крон для этого использовать?
 

Krishna

Продался Java
Redwind
А в чём собственно проблема с платформами и скажем system()?
 

Redwind

Новичок
Все! с платформами разобрался.
Подскажите плиз как сделать, чтобы system() не дожидался конца работы, а сражу шел запускать следующий

for ($i=0; $i<10; $i++)
{
system("php 2.php &", $status);
echo $status;
}
 

Krishna

Продался Java
Note: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.
"php 2.php &" в Windows некорректно, как мне кажется.
 

Redwind

Новичок
Вот для этого я и отписал в форуме, чтобы узнать как корректно в Windows и nix(в фоновом режиме)

-~{}~ 10.04.06 00:49:

Я пробывал еще так(на форуме нашел)

system ("wget http://localhost/2.php --quiet -O /dev/null &");

-~{}~ 10.04.06 00:59:

Необходимо запустить некий ПХП скрипт из другого ПХП скрипта не дожидаясь завершения последнего под никсами и windows.
Посоветуйте как осуществить.

Вот это говорят под никсами работает:
<?
system("/usr/local/bin/php echo.php > /dev/null &");
echo "done";
?>(правда ли?)

А как под виндой сделать?
 

chisto_tolyan

Враг народа
PHP:
system("/usr/local/bin/php -f script.php >> script.log & 2>/dev/null");
в никсах так весь вывод будет писаться в script.log, ошибки в бобруйск, и сюстем не будет дожидаться завершения работы скрипта
 

Redwind

Новичок
А под виндами как сделать?

-~{}~ 10.04.06 21:58:

А можно ли под виндами system пользоваться?
Может есть какие нибудь другие функции которые подобны system и которые подошли бы под мои требования

-~{}~ 11.04.06 19:06:

Ну неужели никто незнает, неужели на таком солидном форуме нет человека, который бы знал ответ на мой вопрос? Помогите плиз!
 

phprus

Moderator
Команда форума
Redwind
system под виндой нормально работает.

В Win скрипт можно запускить следующим образом:
system("/путь до php/php -f script.php > script.log");
В этом примере весь вывод будет писаться в файл script.log
 

Redwind

Новичок
А как заставить эго не ждать пока завершиться system выполняемый в цикле

Пример:
1.php
<?
for ($i=0; $i<10; $i++)
{
system("z:\usr\local\php5\php.exe -f 2.php > script.log");
}
?>

2.php
<?php
sleep(10);
$fp = fopen ("1.txt", "a+");
fwrite ($fp, "Test\n");
fclose ($fp);
?>
 

whirlwind

TDD infected, paranoid
[m]pcntl_fork[/m]


PHP:
$pid = pcntl_fork();
if ($pid == -1) {
     die("could not fork");
} else if ($pid) {
     // we are the parent
     $childs[] = $pid;
} else {
     // we are the child
     system(...);
}
 

Redwind

Новичок
Насколько я знаю форки под Win не пашут!


Вопрос:
Господа мне необходимо запустить с Windiws system() так, чтобы скрипт продолжал работать, не дожидаясь окончания работы system().

Так это делается на никсах
system("/usr/local/bin/php -f script.php >> script.log & 2>/dev/null");

Как делается в Windows?
 

whirlwind

TDD infected, paranoid
через cmd никак. юзай perl там форк работает. или srvany, что весьма коряво. нет в винде понятия - фоновый/не фоновый.
 
Сверху