Szenarien wie dieses gibt es oft im Backend. Zu diesem Zeitpunkt ist es am besten, einen Daemon zu haben, der uns kontinuierlich und automatisch beim Aufrufen unterstützt Diese Skriptprozesse ermöglichen eine wiederholte automatische Ausführung.
Swooles Prozessverwaltungsmodul bietet die Funktion der prozessübergreifenden Kommunikation, mit der die automatische Neustartfunktion untergeordneter Prozesse realisiert werden kann. In swoole können wir residente Prozesse durch Prozessdämonen implementieren.
Um den Schutz von Unterprogrammen zu realisieren, müssen zwei Dinge getan werden:
1 Das Programm muss auf das Endsignal des Unterprozesses hören, um einen neuen Unterprozess neu zu starten . .
2. Die Ausführungsumgebung des untergeordneten Prozesses muss unabhängig vom übergeordneten Prozess sein.
Das Swoole-Prozessverwaltungsmodul stellt eine bool-Process->exec(string $execfile, array $args)-Methode bereit, die es dem untergeordneten Prozess ermöglicht, sich in ein anderes Systemaufrufprogramm umzuwandeln und gleichzeitig sicherzustellen, dass der übergeordnete Prozess stimmt mit dem aktuellen Prozess überein. Es handelt sich immer noch um eine Eltern-Kind-Prozessbeziehung.
Verwenden Sie dann die Array-Methode Process::wait(bool $blocking = true), um auf das Exit-Signal des untergeordneten Prozesses zu warten.
Das Folgende ist ein Beispielcode, der swoole verwendet, um einen Unterprozess zu starten und Unterprozessressourcen zu recyceln:
<?phpuse Swoole\Process; $php = "/usr/bin/env php"; $script = dirname(__DIR__) . "/task.php"; $command = "{$php} {$script}"; $process = new Process(function (Process $worker) use ($command) { $worker->exec('/bin/sh', ['-c', $command]); }); $pid = $process->start(); printf("启动子进程 {$pid}\n");while ($ret = Process::wait()) { $pid = intval($ret["pid"] ?? 0); printf("子进程 {$pid} 结束\n"); }
Codeanalyse:
$command-Variable zeigt an, dass ein Unterprozessskript erforderlich ist , über die Methode exec (), um die Ausführung als Unterprozess zu starten, und verwenden Sie dann Process::wait(), um auf das Ende des Unterprozessskripts $command zu warten und Prozessressourcen wiederzuverwenden.
Solange Sie dann nach Erhalt des Endsignals des untergeordneten Prozesses dasselbe untergeordnete Prozessskript starten, können Sie die Vormundschaft des untergeordneten Prozesses erkennen. Daher der erste Programmimplementierungscode zum Schutz des untergeordneten Prozesses:
<?php use Swoole\Process; $php = "/usr/bin/env php"; $script = dirname(__DIR__) . "/task.php"; $command = "{$php} {$script}"; do { $process = new Process(function (Process $worker) use ($command) { $worker->exec('/bin/sh', ['-c', $command]); }); $pid = $process->start(); printf("启动子进程 {$pid}\n"); } while (Process::wait());
Codeanalyse:
Dieser Code fügt nur die Logik zum Starten des untergeordneten Prozesses in einer Endlosschleife hinzu, sodass der untergeordnete Prozess Skripte können kontinuierlich neu gestartet werden.
Empfohlenes Lernen: Swoole-Video-Tutorial
Das obige ist der detaillierte Inhalt vonWie sich die Flüssigkeit im Prozess entwickelt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!