Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn PHP pcntl_signal keine Wirkung hat?

Was soll ich tun, wenn PHP pcntl_signal keine Wirkung hat?

藏色散人
藏色散人Original
2021-10-15 09:48:192418Durchsuche

php pcntl_signal hat keine Auswirkung, da pcntl den unterbrochenen Systemaufruf standardmäßig automatisch neu startet. Die externe Leistung besteht darin, dass der Systemaufruf nicht unterbrochen werden kann.

Was soll ich tun, wenn PHP pcntl_signal keine Wirkung hat?

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

php Was soll ich tun, wenn pcntl_signal nicht funktioniert?

php pcntl_signal Verwendung und Vorsichtsmaßnahmen

Kürzlich habe ich Sie müssen einen PHP-basierten Multiprozessserver erstellen. Für einen ordnungsgemäßen Neustart müssen Sie das von kill gesendete SIGTERM-Signal erfassen, daher wird pcntl_signal verwendet.

Zuerst stellte ich fest, dass das erfasste Signal ungültig war und die Signalverarbeitungsfunktion nicht eingegeben werden konnte. Ich habe das Dokument studiert und festgestellt, dass ich „declare(ticks = 1)“ ausführen muss. Die Erklärung besagt, dass es eine Uhr erzeugen soll und so weiter. Mein Verständnis ähnelt einem Quarzoszillator. Nach dem Hinzufügen kann der übergeordnete Prozess das Signal empfangen.

Aber der untergeordnete Prozess kann das Signal immer noch nicht empfangen. Nach langer Überprüfung habe ich keine Ausnahme festgestellt. Ich bezweifelte, dass der Systemaufruf hier nicht unterbrochen werden kann while 1 Schleife, und ich kann reibungslos in die Interrupt-Handler-Funktion eintreten.

Dann habe ich gesucht und festgestellt, dass pcntl den unterbrochenen Systemaufruf standardmäßig automatisch neu startet und die externe Leistung darin besteht, dass der Systemaufruf nicht unterbrochen werden kann.

Wenn wir uns das Handbuch noch einmal ansehen, stellt sich heraus, dass pcntl_signal einen dritten Parameter hat, der ebenfalls ein optionaler Parameter ist. Damit können wir entscheiden, ob der Systemaufruf automatisch neu gestartet werden soll. SPCNTL_SIGNAL-Funktionsprofil

(PHP 4 & GT; = 4.1.0, PHP 5, PHP 8)

pcntl_signal – Installieren Sie einen Signalprozessor

Rreee

Funktion pcntl_signal () ist die Installiert einen neuen Signalhandler für das von signo angegebene Signal.

Parameter

signo

Signalnummer.

handler

Der Signalhandler kann der Name einer vom Benutzer erstellten Funktion oder Methode oder die Systemkonstante SIG_IGN (Anmerkung: Signalhandler ignorieren) oder SIG_DFL (Standardsignalhandler) sein.

Hinweis:

Achten Sie darauf, wenn Sie eine Methode für ein Objekt verwenden. Der Referenzzähler des Objekts wird erhöht, sodass er bestehen bleibt, bis Sie ihn auf eine andere Verarbeitung umstellen oder das Skript beendet.

restart_syscalls

Gibt an, ob ein Neustart des Systemaufrufs verfügbar ist, wenn das Signal eintrifft. (Anmerkung: Nach Überprüfung der Informationen gibt dieser Parameter an, ob der Systemaufruf von Anfang an neu gestartet wird, wenn der Systemaufruf durch ein Signal unterbrochen wird. Laut http://bugs.php.net/bug.php?id= 52121, dieser Parameter ist fehlerhaft und ungültig)

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP pcntl_signal keine Wirkung hat?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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