2009-09-28 1 views
0

У меня есть самый основной сценарий:Почему мой родительский процесс не ждет завершения его дочернего процесса?

$pid = pcntl_fork(); 
if ($pid == -1) { 
    die('could not fork'); 
} else if ($pid) { 
    // we are the parent 
    echo "parent done"; 
    pcntl_wait($status); //Protect against Zombie children 
    echo "all done"; 
} else { 
    // we are the child 
    echo "Child finished"; 
} 

Когда я запускаю это, выход всегда «Ребенок закончил». Я запускаю это на сервере lighttpd.

ответ

0

Может быть, что ваш получать сигнал от ребенка, но это не статус выхода попробовать некоторые вещи, как:

do { 
    pcntl_wait($status); 
} while (!pcntl_wifexited($status)); 

Чтобы убедиться, что состояние является выход один (SIGCHILD).

+0

Это не имеет никакого эффекта. –

+0

Какой результат вы ожидаете? Попытайтесь спать в течение секунды, прежде чем эхо ребенка закончите. – Neel

+0

Я ожидаю увидеть «сделанный родителем» «все сделано». Сон не имеет значения. –