Heim > PHP-Framework > Swoole > Wie sich die Flüssigkeit im Prozess entwickelt

Wie sich die Flüssigkeit im Prozess entwickelt

Freigeben: 2019-12-10 13:58:34
Original
3782 Leute haben es durchsucht

Wie sich die Flüssigkeit im Prozess entwickelt

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(&#39;/bin/sh&#39;, [&#39;-c&#39;, $command]);
});
$pid = $process->start();

printf("启动子进程 {$pid}\n");while ($ret = Process::wait()) {
    $pid = intval($ret["pid"] ?? 0);
    printf("子进程 {$pid} 结束\n");
}
Nach dem Login kopieren

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(&#39;/bin/sh&#39;, [&#39;-c&#39;, $command]);
    });
    $pid = $process->start();

    printf("启动子进程 {$pid}\n");
} while (Process::wait());
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage