Inhaltsverzeichnis
Was ist ein Signal? Ein Signal ist ein Benachrichtigungsmechanismus (auch Software-Interrupt genannt) für den Prozess, wenn ein Ereignis auftritt. Wenn ein Prozess ein Signal empfängt, unterbricht der Kernel den vom Prozess ausgeführten Code und springt zur entsprechenden Signalverarbeitungsfunktion. Wenn die Verarbeitungsfunktion nicht unterbricht, wird die Ausführung nach der Ausführung der Verarbeitungsfunktion an der Stelle fortgesetzt, an der sie unterbrochen wurde. implementieren.
PHP的信号处理举例
PHP的信号处理并不是直接调用C
PHP如何优雅的处理信号
Heim Backend-Entwicklung PHP-Tutorial Signalverarbeitung für PHP-Programmierer

Signalverarbeitung für PHP-Programmierer

Feb 04, 2021 am 07:04 AM
pcntl php signal

Tutorial zur Signalverarbeitung für PHP-Programmierer

Heute Abend habe ich geschmortes Schweinefleisch gegessen, und das Mädchen am Tisch fragte mich: Kann man das essen? Ich: Du kannst es essen, wenn du denkst, dass du es kannst. . . Ein Thema, das nichts mit dem Inhalt zu tun hat

Was ist ein Signal? Ein Signal ist ein Benachrichtigungsmechanismus (auch Software-Interrupt genannt) für den Prozess, wenn ein Ereignis auftritt. Wenn ein Prozess ein Signal empfängt, unterbricht der Kernel den vom Prozess ausgeführten Code und springt zur entsprechenden Signalverarbeitungsfunktion. Wenn die Verarbeitungsfunktion nicht unterbricht, wird die Ausführung nach der Ausführung der Verarbeitungsfunktion an der Stelle fortgesetzt, an der sie unterbrochen wurde. implementieren.

Wir schreiben Code im FPM-Modus und werden keine Probleme im Zusammenhang mit der Signalverarbeitung haben. Wie können jedoch einige speicherresidente Skripte im CLI-Modus frei neu gestartet, heruntergefahren und einige Aufräumarbeiten durchgeführt werden, bevor sie beendet werden (Verbindung trennen). , temporäre Dateien löschen usw.)?

C-Signalverarbeitungsbeispiel

Signalverarbeitung für PHP-ProgrammiererIm Bild oben habe ich die Verarbeitungsfunktion sigint_handle für das Signal SIGINT nach der Signalerfassung und nach der Ausgabe registriert Der Inhalt ist einfach und leicht verständlich. Führen Sie gcc -o run run.c && ./run aus, dann STRG+C (das Signal SIGINT wird ausgelöst) und erfolgreiche Ausgabe : Signal 2 wurde erfolgreich erfasst!, und das Programm wird sofort beendet. Beispiel für die PHP-Signalverarbeitung 5605e8a17d80b .png"/>

SIGINT注册了处理函数sigint_handle,捕获到信号后,输出内容后退出,简单易懂吧。执行 gcc -o run run.c && ./run ,然后CTRL+C(会触发SIGINT信号),成功输出:成功捕获到信号2!,程序直接结束运行。

PHP的信号处理举例

Signalverarbeitung für PHP-Programmierer

pcntl_signal是PHP的信号处理注册方法,上面实现的功能和C实现的基本一致,不同的是,当前进程不会退出,并且多输出了一个signinfo(PHP是C写的,为啥刚刚C语言的没有信号相关的信息呢?因为PHP使用的是另一个信号函数sigaction,有兴趣的可以了解一下)

PHP的信号处理并不是直接调用C

Signalverarbeitung für PHP-Programmierer

这个是pcntl初始化的时候,将pcntl_signal_dispatch注册为tick的处理函数

Signalverarbeitung für PHP-Programmierer

pcntl_signal会将处理函数放到信号集合中(PHP的hash table),而php_signale4最终会调用sigaction进行底层的信号管理。

Signalverarbeitung für PHP-Programmierer

这里我省略了大量代码,将关键的点标记了出来,其实PHP维护一个自己的信号集合,每当调用pcntl_signal_dispatch时就会查询是否有信号,上面的SIG_BLOCK会将信号阻塞,这样只有我们把关键的代码执行完毕之后,再去触发信号处理函数以保证数据和程序逻辑的完整性。

PHP如何优雅的处理信号

经常见到身边的程序员们,每当需要重启PHP-FPM进程的时候,使用的招数是kill掉所有PHP进程,然后新启动。一般情况没啥问题,但有些时候可能某个进程的任务还没执行完,直接把人家中断了略显粗暴。其实只要你给PHP的Master进程发送一条USR2信号,它便会再处理完所有任务后,重启子进程,这才是所谓的优雅~

Signalverarbeitung für PHP-Programmierer

上图是我简单写的一个例子,如果我们想让进程优雅退出的时候,只需要发送SIGTERM信号即可。需要注意的是SIGKILLSIGSTOP信号会略过信号阻塞会将进程直接停止,还有就是信号会中断睡眠(SLEEP),sleeppcntl_signal ist die Signalverarbeitungsregistrierungsmethode von PHP. Die oben implementierten Funktionen sind grundsätzlich dieselben wie die in C implementierten. Der Unterschied besteht darin, dass der aktuelle Prozess nicht beendet wird und Geben Sie noch eine signinfo aus (PHP ist in C geschrieben. Warum gibt es derzeit keine signalbezogenen Informationen in der C-Sprache? Weil PHP eine andere Signalfunktion sigaction verwendet, diejenigen, die es sind Interessierte können mehr darüber erfahren)

PHPs Signalverarbeitung ruft C nicht direkt auf

Signalverarbeitung für PHP-Programmierer🎜🎜Wenn pcntl initialisiert wird, registrieren Sie pcntl_signal_dispatch als Tick-Verarbeitungsfunktion🎜🎜Signalverarbeitung für PHP-Programmierer 🎜🎜Hier Ich habe viel Code weggelassen und die wichtigsten Punkte markiert. Tatsächlich fragt PHP bei jedem Aufruf von pcntl_signal_dispatch ab, ob ein Signal vorhanden ist code> blockiert das Signal, sodass wir erst nach Abschluss der Ausführung des Schlüsselcodes die Signalverarbeitungsfunktion auslösen können, um die Integrität der Daten und der Programmlogik sicherzustellen. 🎜🎜Wie PHP mit Signalen elegant umgeht🎜🎜Ich sehe oft Programmierer um mich herum, wenn sie den <code>PHP-FPM-Prozess neu starten müssen, der Trick, den sie anwenden, besteht darin, alle PHP-Prozesse zu beenden und dann einen neuen zu starten . . Im Allgemeinen gibt es kein Problem, aber manchmal wird die Aufgabe eines bestimmten Prozesses möglicherweise nicht abgeschlossen und es wäre etwas unhöflich, ihn direkt zu unterbrechen. Solange Sie ein USR2-Signal an den PHP-Master-Prozess senden, werden alle Aufgaben abgeschlossen und der untergeordnete Prozess neu gestartet. Dies ist die sogenannte Eleganz~🎜🎜 541FC1FC34BABFE57D6666790F55 .png 是 Das Bild oben ist ein Beispiel, das ich einfach schreibe Wenn wir möchten, dass der Prozess ordnungsgemäß beendet wird, müssen wir nur das Signal SIGTERM senden. Es ist zu beachten, dass die Signale SIGKILL und SIGSTOP die Signalblockierung überspringen und den Prozess direkt stoppen und das Signal den Ruhezustand (SLEEP), sleepWenn die Ausführung nicht abgeschlossen ist, werden die verbleibenden Sekunden zurückgegeben. Wenn Sie interessiert sind, können Sie es versuchen. 🎜🎜Es gibt tatsächlich viele Wissenspunkte im Zusammenhang mit Signalen, und wir müssen sie weiterhin eingehend untersuchen. ~ Der obige PHP-Quellcode ist Version 7.1.25, und jede Version kann unterschiedlich sein. 🎜🎜

Das obige ist der detaillierte Inhalt vonSignalverarbeitung für PHP-Programmierer. 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ßer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

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)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

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.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles