Вы можете определенно контролировать дочерний процесс:
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_waitpid($pid, $status, WUNTRACED); //Protect against Zombie children
if (pcntl_wifexited($status)) {
echo "Child exited normally";
} else if (pcntl_wifstopped($status)) {
echo "Signal: ", pcntl_wstopsig($status), " caused this child to stop.";
} else if (pcntl_wifsignaled($status)) {
echo "Signal: ",pcntl_wtermsig($status)," caused this child to exit with return code: ", pcntl_wexitstatus($status);
}
} else {
pcntl_exec("/path/to/php/script");
echo "Could not Execute...";
}
- pcntl_wifexited () - Проверяет, представляет ли код состояния нормальный выход
- pcntl_wifstopped () - Проверяет, остановлен ли дочерний процесс в данный момент
- pcntl_wifsignaled () - Проверяет, представляет ли код состояния завершение из-за сигнала
- pcntl_wexitstatus () - возвращает код возврата прерванного потомка
- pcntl_wtermsig () - возвращает сигнал, из-за которого дочерний процесс завершился
- pcntl_wstopsig () - возвращает сигнал, который заставил ребенка остановиться
EDIT:
Уточнение относительно обмена сообщениями между родительским и дочерним процессами; Вы определенно не можете поймать исключения через процессы. Что касается обмена сообщениями, используя только библиотеку PCNTL, вы также ограничены обработкой сигналов и кодов выхода.
Не зная, что именно вы делаете. У вас есть множество других вариантов. Я бы предложил одно из следующих решений для асинхронного обмена сообщениями, поскольку они могут удовлетворить ваши потребности.
На основе файлов
Ваши дочерние процессы могут записывать сообщения в файл, который будет опрашиваться родителем.
на основе Memcache
То же, что и выше, но с использованием memcached в качестве средства связи.
База данных
То же, что и выше, но с использованием таблицы БД в качестве средства связи.
PHP-семафор / библиотека IPC
http://us3.php.net/manual/en/book.sem.php
Это позволяет вам использовать методы, такие как msg_send () и msg_receive (), для взаимодействия между процессами.
Я уверен, что один из них обеспечит решение, которое вы ищете. Если говорить о специфике использования любого из этих методов, то, вероятно, выходит за рамки этого вопроса, но не стесняйтесь задавать новый вопрос, если вам нужна помощь с тем методом, который вы решите использовать.