Я не совсем уверен, что я действительно понимаю, что вы хотите получить, но если вы хотите, чтобы ваше сообщение "Готово" отображалось:
- только один раз
- только когда два процесса выполнили свою работу
Вы должны:
- Используйте
pcntl_wait
в родительском процессе, поэтому он ожидает смерти своего потомка
- Эхо "завершено" из родительского процесса после того, как оно завершило ожидание.
Например, что-то вроде этого должно сделать:
$pid = pcntl_fork();
if ($pid == -1) {
die("could not fork");
}
else if($pid) { // Father
sleep(mt_rand(0, 5));
echo "Father done\n";
pcntl_wait($status); // Wait for the children to finish / die
echo "All Finished\n\n";
}
else { // Child
sleep(mt_rand(0, 5));
echo "Child done\n";
}
При этом каждый процесс будет выполнять свою работу, и только после завершения обоих родительский процесс будет отображать, что все сделано:
- если родитель сделан первым, он будет ждать ребенка
- если ребенок заканчивается первым, родитель не будет ждать ... Но все равно закончит после него.
Как примечание: вы используете два отдельных процесса; разветвившись, вы не сможете «легко» обмениваться данными между ними - поэтому нелегко передать данные от ребенка отцу, равно как и наоборот.
Если вам нужно сделать это, вы можете взглянуть на Функции совместно используемой памяти - или просто использовать простые файлы ^^
Надеюсь, это поможет - и что я правильно понял вопрос ^^