Inhaltsverzeichnis
Implementierung von pcntl_signal_dispatch
PCNTL-Funktionen:
Signalverarbeitung
Führen Sie das Programm aus
Prozess erstellen
Prozesspriorität
Heim Backend-Entwicklung PHP-Tutorial Wie PHP mit Prozesssignalen umgeht (mit Beispielen)

Wie PHP mit Prozesssignalen umgeht (mit Beispielen)

Sep 28, 2018 pm 04:05 PM
php

Der Inhalt dieses Artikels befasst sich mit der Verarbeitung von Prozesssignalen durch PHP. Ich hoffe, dass er für Sie hilfreich ist.

php verfügt über eine Reihe von Prozesssteuerungsfunktionen PCNTL, die es PHP ermöglichen, untergeordnete Prozesse zu erstellen, die exec-Funktion zum Ausführen von Programmen zu verwenden, Signale zu verarbeiten und andere Funktionen wie c in *nix-Systemen zu verwenden.

Hinweis: Die pcntl-Erweiterung ist nur im CLI/CGI-Modus verfügbar. Nicht verfügbar in mod_php und php-fpm. Verwenden Sie diese Funktionen nicht in einer Webserverumgebung, da dies zu unvorhersehbaren Ergebnissen führt. Darüber hinaus verfügt Windows als nicht-Unix-ähnliches System nicht über diese Funktionen.

PCNTL verwendet Ticks als Signal-Handle-Rückrufmechanismus, der die Belastung bei der Verarbeitung asynchroner Ereignisse minimieren kann. Was sind Zecken? Tick ​​ist ein Ereignis, das jedes Mal auftritt, wenn der Interpreter N Low-Level-Anweisungen in einem Codesegment ausführt. Dieses Codesegment muss durch Deklarieren angegeben werden.

Das Folgende ist ein Beispiel für das Senden eines SIGALRM-Signals alle 5 Sekunden, das Abrufen durch die signal_handler-Funktion und das anschließende Drucken eines „Caught SIGALRM“:

<?php   
        declare(ticks = 1);   
      
        function signal_handler($signal) {   
            print "Caught SIGALRM/n";   
            pcntl_alarm(5);   
        }   
      
        pcntl_signal(SIGALRM, "signal_handler", true);   
        pcntl_alarm(5);   
      
        while(true){

        }
      
    ?>
Nach dem Login kopieren

Tatsächlich ist die Leistung des Das offizielle pcntl_signal ist äußerst schlecht, hauptsächlich weil PHP-Funktionen nicht direkt in den Signaleinstellungen des Betriebssystems registriert werden können und das pcntl-Signal daher auf dem Tick-Mechanismus basieren muss. Das Implementierungsprinzip von pcntl_signal besteht darin, das Signal nach dem Auslösen des Signals einer Warteschlange hinzuzufügen. Überprüfen Sie dann kontinuierlich, ob in der Ticks-Callback-Funktion ein Signal vorhanden ist. Führen Sie die in PHP angegebene Callback-Funktion aus. Wenn nicht, verlassen Sie die Funktion. ticks=1 bedeutet, dass diese Funktion jedes Mal zurückgerufen wird, wenn eine Zeile PHP-Code ausgeführt wird. Tatsächlich wird die meiste Zeit kein Signal generiert, aber die Ticks-Funktion wird immer ausgeführt. Ein besserer Ansatz besteht darin, Häkchen zu entfernen und stattdessen pcntl_signal_dispatch zu verwenden, um das Signal selbst in der Codeschleife zu verarbeiten.

Implementierung von pcntl_signal_dispatch

<?php
// 定义一个处理器,接收到SIGINT信号后只输出一行信息
function signalHandler($signo) {
    switch ($signo) {
        case SIGUSR1: echo "SIGUSR1\n"; break;
        case SIGUSR2: echo "SIGUSR2\n"; break;
        default:      echo "unknow";    break;
    }
}

//安装信号触发器器
pcntl_signal(SIGINT, &#39;signalHandler&#39;);
while (true) {
    sleep(1);
    posix_kill(posix_getpid(), SIGUSR1);///向当前进程发送SIGUSR1信号
    pcntl_signal_dispatch(); //接收到信号时,调用注册的signalHandler()
}
Nach dem Login kopieren

PCNTL-Funktionen:

Signalverarbeitung

int pcntl_alarm ( int $seconds )
Nach dem Login kopieren

Stellen Sie einen Zähler ein, um das SIGALRM-Signal nach $seconds Sekunden zu senden

bool pcntl_signal(int $signo ,callback $handler [,bool $restart_syscalls=true])
Nach dem Login kopieren

Legen Sie eine Rückruffunktion für $signo fest, um das Signal zu verarbeiten

Der erste Parameter ist die Signalnummer Der zweite Parameter ist die PHP-Funktion, die beim Auftreten des Signals zurückgerufen werden soll. Der dritte Parameter ist, ob ein Neustart durchgeführt und dieses Signal erneut registriert werden soll. Wenn dieser Parameter falsch ist, wird dieses Signal nur einmal registriert und verarbeitet.

Hinweis: Jeder Aufruf von pcntl_alarm() bricht das zuvor eingestellte Alarmsignal und die Sleep()-Funktion ab.

Das Folgende ist ein Beispiel für das Senden eines SIGALRM-Signals alle 5 Sekunden, das Abrufen durch die signal_handler-Funktion und das anschließende Drucken eines „Caught SIGALRM“:

<?php   
        declare(ticks = 1);   
      
        function signal_handler($signal) {   
            print "Caught SIGALRM/n";   
            pcntl_alarm(5);   
        }   
      
        pcntl_signal(SIGALRM, "signal_handler", true);   
        pcntl_alarm(5);   
      
        for(;;) {   
        }   
      
    ?>
Nach dem Login kopieren

Führen Sie das Programm aus

void pcntl_exec ( string $path [, array $args [, array $envs ]] )
Nach dem Login kopieren

Führen Sie das angegebene Programm im aktuellen Prozessraum aus, ähnlich der Exec-Familienfunktion in C. Der sogenannte aktuelle Bereich ist der Bereich, in den der Code des angegebenen Programms geladen wird und den aktuellen Prozess überschreibt. Der Prozess endet, wenn das Programm ausgeführt wird.

<?php   
    $dir = &#39;/home/test/&#39;;   
    $cmd = &#39;ls&#39;;   
    $option = &#39;-l&#39;;   
    $pathtobin = &#39;/bin/ls&#39;;   
      
    $arg = array($cmd, $option, $dir);   
      
    pcntl_exec($pathtobin, $arg);   
    echo &#39;123&#39;;    //不会执行到该行   
    ?>
Nach dem Login kopieren

Prozess erstellen

int pcntl_fork ( void ) 为当前进程创建一个子进程
int pcntl_wait ( int &$status [, int $options ] ) 阻塞当前进程,只到当前进程的一个子进程退出或者收到一个结束当前进程的信号。 
int pcntl_waitpid ( int $pid , int &$status [, int $options ] ) 功能同pcntl_wait,区别为waitpid为等待指定pid的子进程。当pid为-1时pcntl_waitpid与pcntl_wait一样。
Nach dem Login kopieren

Die Statusinformationen des untergeordneten Prozesses werden in $status in den Funktionen pcntl_wait und pcntl_waitpid gespeichert. Dieser Parameter kann für pcntl_wifexited und pcntl_wifstopped verwendet werden , pcntl_wifsignaled, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_waitpid Funktionen.

Zum Beispiel

<?php   
    $pid = pcntl_fork();   
    if($pid) { 
        pcntl_wait($status);   
        $id = getmypid();   
        echo "parent process,pid {$id}, child pid {$pid}/n";   
    } else {   
        $id = getmypid();   
        echo "child process,pid {$id}/n";   
        sleep(2);   
    }   
    ?>
Nach dem Login kopieren

Der untergeordnete Prozess schläft 2 Sekunden lang, bevor er nach der Ausgabe von Wörtern wie „untergeordneter Prozess“ beendet wird, während der übergeordnete Prozess blockiert, bis der untergeordnete Prozess beendet wird, bevor er weiter ausgeführt wird.

Prozesspriorität

int pcntl_getpriority ([ int $pid [, int $process_identifier ]] ) 取得进程的优先级,即nice值,默认为0。不同的系统类型以及内核版本下 优先级可能不同(手册中为-20到20)
bool pcntl_setpriority ( int $priority [, int $pid [, int $process_identifier ]] ) 设置进程的优先级
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie PHP mit Prozesssignalen umgeht (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles