Heim > Backend-Entwicklung > PHP-Problem > Wie aktiviere ich das PCNTL-Modul und implementiert die Multiprozessprogrammierung in PHP?

Wie aktiviere ich das PCNTL-Modul und implementiert die Multiprozessprogrammierung in PHP?

王林
Freigeben: 2023-02-23 13:14:01
nach vorne
4518 Leute haben es durchsucht

Überprüfen Sie zunächst die PHP-Version, die ich installiert habe:

PHP 7.3.7 (cli) (built: Jul 12 2019 22:25:55) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
Nach dem Login kopieren

php muss das pcntl-Modul installieren, um Multiprozess zu implementieren. Dieses Modul wird offiziell von PHP bereitgestellt, also wir kann es in PHP verwenden. Laden Sie den Quellcode von php7.3.7 herunter und entpacken Sie ihn in das Verzeichnis /home. Zu diesem Zeitpunkt befindet sich die von uns benötigte Erweiterung pcntl in /home/php-7.3.7/ext/pcntl

Führen Sie nacheinander folgende Befehle aus :

phpize
./configure --with-php-config=/usr/local/bin/php-config
make & make install
Nach dem Login kopieren

Hier können Sie mit php-config den Pfad der find / -name php-config-Datei ermitteln und schließlich die pcntl.so-Datei generieren.

Suchen Sie dann den Pfad, in dem sich die INI-Datei von PHP befindet. Sie können den Befehl php --ini verwenden, um ihn anzuzeigen.

Was den Pfad des PHP-Erweiterungsmoduls betrifft, können Sie ihn verwenden php -i | grep extension_dir um es anzuzeigen, und kopieren Sie dann die generierte SO-Datei in den Modulpfad. Laden Sie extension=pcntl herunter und fügen Sie sie zur php.ini-Datei hinzu.

Verwenden Sie php -m, um zu überprüfen, ob das Modul geladen ist! An diesem Punkt wird das pcntl-Modul installiert. Die Funktion

rrree

pcntl_fork() erstellt einen untergeordneten Prozess. Bei Erfolg wird die PID des generierten untergeordneten Prozesses im Ausführungsthread des übergeordneten Prozesses zurückgegeben. Gibt 0 innerhalb zurück. Bei einem Fehler wird -1 im übergeordneten Prozesskontext zurückgegeben, der untergeordnete Prozess wird nicht erstellt und ein PHP-Fehler wird ausgelöst.

pcntl_waitpid() – Warten Sie auf den Status des untergeordneten Prozesses von fork oder geben Sie ihn zurück, unterbrechen Sie die Ausführung des aktuellen Prozesses, bis der Prozess mit der durch den Parameter pid angegebenen Prozessnummer beendet wird, oder erhalten Sie ein Signal mit der Aufforderung, den Prozess zu unterbrechen aktuellen Prozess oder rufen Sie eine Signalhandlerfunktion auf. Der zurückgegebene Wert kann -1, 0 oder >0 sein. Wenn er -1 ist, bedeutet dies, dass der untergeordnete Prozess einen Fehler aufweist. Wenn er >0 ist, bedeutet dies, dass der untergeordnete Prozess beendet wurde und der Wert die PID des beendenden Prozesses ist Untergeordneter Prozess. Zum Beenden können Sie die Statuscode-Antwort „$status“ übergeben.

for ($i = 0; $i < 3; $i++){   
    $pid = pcntl_fork();
     if ($pid == -1) {
        die("开启进程失败");
    } elseif ($pid) { 
         echo "启动子进程 $pid \n";
    } else {
      echo "子进程 ".getmypid()." 正在处理任务\n";
      sleep(rand(5,10));
      exit;
    }
}

while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);    
    echo "子进程推出,状态码 $status \n";
}
Nach dem Login kopieren
pcntl_wifexited – Prüft, ob der Statuscode einen normalen Exit darstellt.

pcntl_wifsignaled

– Prüft, ob der Statuscode des untergeordneten Prozesses einen darstellt normaler Ausgang Unterbrochen durch ein Signal

pcntl_wtermsig

– Gibt das Signal zurück, das die Unterbrechung des untergeordneten Prozesses verursacht hat

Wir öffnen eines der beiden Fenster:


Wie aktiviere ich das PCNTL-Modul und implementiert die Multiprozessprogrammierung in PHP?

Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website: Wie aktiviere ich das PCNTL-Modul und implementiert die Multiprozessprogrammierung in PHP?PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie aktiviere ich das PCNTL-Modul und implementiert die Multiprozessprogrammierung in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
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