pcntl_fork()

serg1k

Новичок
pcntl_fork()

Меня интересует, правильно ли я написал скрипт, поскольку я не очень понимаю как работает форк и можно ли его так использовать внутри цикла while?
PHP:
// Запрос к БД, получаем id-номера
$sql = mysql_query('SELECT...');

while($row = mysql_fetch_row($sql))
	{
		$pid = pcntl_fork();
		if ($pid == -1)
			{
		    		die('could not fork');
			}
			elseif($pid)
				{
 		    			// we are the parent
 		   			pcntl_wait($status);
				}
				else
					{
   		  				// we are the child
   		  				system("/server/shared/php4/bin/php script.php id=$row[0]"); // Запуск стороннего скрипта, с id, полуенными из БД

					}
	}
 

serg1k

Новичок
Сторонний скрипт очень тяжелый, поэтому было решено запускать его в несколько потоков, а не в один.
PHP:
// Запрос к БД, получаем id-номера 
$sql = mysql_query('SELECT...'); 

while($row = mysql_fetch_row($sql)) 
    { 
              system("/server/shared/php4/bin/php script.php id=$row[0]"); // Запуск стороннего скрипта, с id, полуенными из БД 

    }
Или так будет тоже самое?

-~{}~ 07.02.07 17:12:

В данном случае, когда используется функция system() скрипт ждет ее завершения перед тем как работать дальше?
 

hermit_refined

Отшельник
pcntl_fork к потокам никакого отношения не имеет. и лучше вам её не использовать, от греха подальше - потому как, например, приведённый вами скрипт не будет работать так, как вы ожидаете.

В данном случае, когда используется функция system() скрипт ждет ее завершения перед тем как работать дальше?
да. если хотите параллельного выполнения - запускайте через system в background.
 

serg1k

Новичок
Что-то я не совсем понял как запустить system в бекграунде, в мануале такого не нашел.
 
Сверху