Контроль Детей Разветвленное использование PHP

Переключатели на основе целых чисел могут быть оптимизированы к очень efficent код. Переключатели на основе другого типа данных могут только быть скомпилированы в серию если () операторы.

По этой причине C & C++ только позволяет, включает целые типы, так как это было бессмысленно с другими типами.

разработчики C# решили, что стиль был важен, даже если не было никакого преимущества.

разработчики Java, по-видимому, думали как разработчики C.

9
задан asp 21 July 2009 в 16:10
поделиться

1 ответ

Вы определенно можете отслеживать дочерний процесс:

$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 () - возвращает сигнал, из-за которого дочерний процесс остановился

РЕДАКТИРОВАТЬ:

Для пояснения относительно обмена сообщениями между родительским и дочерним процессом; вы определенно не можете перехватить исключения между процессами. Что касается обмена сообщениями, то при использовании только библиотеки PCNTL вы также ограничены обработкой сигналов и кодов выхода.

Не зная, что именно вы делаете. У вас есть множество других вариантов. Я' d предложить одно из следующих решений для асинхронного обмена сообщениями, поскольку они могут удовлетворить ваши потребности.

На основе файлов

Ваши дочерние процессы могут записывать сообщения в файл, который будет опрошен родителем.

На основе Memcache

То же, что и выше, но с использованием memcached в качестве среды связи.

На основе базы данных

То же, что и выше, но с использованием таблицы db в качестве среды связи.

Семафор PHP / библиотека IPC

http: / /us3.php.net/manual/en/book.sem.php

Это позволяет вам использовать такие методы, как msg_send () и msg_receive () для взаимодействия между процессами.

Я уверен, что один из них предоставит решение, которое вы ищете. Однако подробное рассмотрение того, как использовать любой из этих методов, вероятно, выходит за рамки этого вопроса,

17
ответ дан 4 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: