2013-07-16 4 views
0

Я пытаюсь использовать pcntl extetntion для PHP для запуска некоторых методов моего класса CLI в новом потоке. Я написал небольшой метод испытаний:Как начинать и заканчивать новые php-проекты?

private function startProcess($data) 
{ 
    $this->log('Start a child process'); 

    $pid = pcntl_fork(); 

    if($pid == -1) 
     $this->log('Could not fork'); 
    elseif($pid) 
     pcntl_wait($status); 
    else { 
     $this->process($data); 
     sleep(10); 
     posix_kill(posix_setsid(), SIGTERM); 
    } 
} 

Этот метод называется 10 раз. $this->process($data); просто печатает данные в консоли. Как я понял, он должен запустить 10 процессов и распечатать мои данные после его выхода. Но вместо этого я жду 10 секунд для каждого сообщения. Где я ошибаюсь?

+0

'pcntl_wait' делает родительский процесс ждать ребенка одного, чтобы вернуть статус. Ваш ребенок делает что-то, а затем ждет 10 секунд. Родитель ничего не сделает, пока ребенок не выйдет (что вы делаете с posix_kill). Чего ты хочешь достичь? –

ответ

2

Вы ожидаете завершения каждого процесса сразу после его запуска. Если вы действительно хотите запустить 10 в то время, не ждать, пока вы не начали все 10.

for($i = 0; $i < 10; $i++) 
    startProcess(...); 

for($i = 0; $i < 10; $i++) 
    pcntl_wait($status); 

private function startProcess($data) 
{ 
    $this->log('Start a child process'); 

    $pid = pcntl_fork(); 

    if($pid == -1) 
     $this->log('Could not fork'); 
    elseif(!$pid) { 
     $this->process($data); 
     sleep(10); 
     posix_kill(posix_setsid(), SIGTERM); 
    } 
} 
+0

Как это сделать ??? – Kin

+0

@ Кирикс - если вы что-то не понимаете, скажите, что вы не понимаете, набрав ??? заставляет вас выглядеть немым. Этот ответ является единственным правильным, он сначала запускает 10 процессов, а затем в другом блоке ждет их статуса выхода. Вы этого не делали. Если вам нужно уточнить, что делает каждая функция, скажите так, как обычный, умный человек. –

+0

@ N.B. это было до того, как он отредактировал ваш ответ. Так что попробовал, но это становится зомби-процессом. https://www.dropbox.com/s/wc6owbk8qf19kyy/php_zombie.jpg – Kin

Смежные вопросы

 Смежные вопросы