1. Сценарии использования демона процесса.
Часто существуют сценарии, подобные этому, в фоновом режиме, когда сценарий необходимо запускать повторно. В это время лучше иметь демона, который поможет нам постоянно автоматически запускать эти процессы сценариев и заставлять их автоматически запускаться повторно.
В системе Linux/Unix супервизор является отличным инструментом управления процессами, разработанным python. В этой статье предпринята попытка использовать PHP для реализации аналогичных инструментов управления процессами.
Во-вторых, модуль управления процессами свул .
Все расширение PHP имеет модуль управления процессами. Для получения официальной документации см.: модуль управления процессами swool
Что касается реализации супервизора, защищенный процесс запускается как подпроцесс супервизора. Супервайзер может автоматически перезапустить подпроцесс, отслеживая сигнал подпроцесса. Модуль управления процессами swoole обеспечивает функцию межпроцессной связи и может реализовать функцию автоматического перезапуска подпроцессов.
В-третьих, первый демон процесса.
Для того чтобы реализовать опеку над подпрограммами, нам нужно сделать две вещи:
- Программе необходимо прослушать конечный сигнал дочернего процесса, чтобы запустить новый дочерний процесс.
- Рабочая среда дочернего процесса должна быть независимой от родительского процесса.
Модуль управления процессами swool предоставляет метод bool process – > exec (файл string $exec, массив $args) для преобразования дочернего процесса в другой системный вызывающий объект, гарантируя при этом, что родительский процесс и текущий процесс по-прежнему являются отношениями между родительским и дочерним процессами.
Затем мы ждем сигнала выхода подпроцесса через метод массива process:: wait (bool).
Ниже приведен пример кода, который использует swool для запуска и утилизации ресурсов дочерних процессов:
Синтаксический анализ кода: Переменная $command представляет необходимость запуска сценария подпроцесса в качестве подпроцесса методом exec (), а затем дождитесь завершения сценария подпроцесса $command с помощью вызова process:: wait () и рециркуляции ресурсов процесса.
Таким образом, до тех пор, пока получен сигнал об окончании подпроцесса и снова запускается тот же сценарий подпроцесса, может быть реализована защита подпроцесса. Таким образом, программный код реализации первого подпроцесса демона:
exec('/bin/sh', ['-c', $command]); }); $pid = $process->start(); Printf ("promoter process {$pid} n"); } while (Process::wait());
Анализ кода: Этот код только добавляет логику начального процесса в мертвый цикл, чтобы сценарий дочернего процесса можно было непрерывно перезапускать.
IV. Упаковка в классы
Чтобы облегчить повторное использование этого кода, его можно инкапсулировать в простой класс:
command = $command; } public function run() { do { $process = new Process(function (Process $worker) { $worker->exec('/bin/sh', ['-c', $this->command]); }); $pid = $process->start(); } while (Process::wait()); } }
Затем класс демона используется следующим образом:
run();
Хотя этот простой класс демона может перезапустить хранителя одного сценария, если у нас есть много сценариев для защиты одновременно, класс демона, очевидно, не может соответствовать требованиям.
В следующей статье swool используется для реализации демона процессов (2), который попытается расширить этот класс демонов.