PHP Australia Conference 2015

Einführung

Die Prozesskontrollunterstützung in PHP implementiert die Unixausführung von Prozesserzeugung, Programmausführung, Signalverarbeitung und Prozesstermination. Prozesskontrolle sollte nicht innerhalb einer Webserverumgebung aktiviert werden und unerwartete Ergebnisse können auftreten, wenn eine Prozesskontrollfunktion innerhalb einer Webserverumgebung verwendet wird.

Die Absicht dieser Dokumentation ist es, die allgemeine Verwendung jeder der Prozesskontrollfunktionen zu erklären. Für detaillierte Informationen über Unix Prozesskontrolle empfehlen wir Ihnen, die Dokumentation Ihres Systems einschließlich fork(2), waitpid(2) und signal(2) oder eine umfassende Referenz wie zum Beispiel Advanced Programming in the UNIX Environment von W. Richard Stevens (Addison-Wesley) hinzuzuziehen.

PCNTL verwendet mitlerweile Ticks als Signalverarbeitungs-Callbackmechanismus, welcher wesentlich schneller als der zuvor verwendete Mechanismus ist. Dieser Wechsel folgt der selben Semantik wie die Verwendung von "Benutzer Ticks". Man verwendet die declare() Anweisung, um die Stellen in seinem Programm anzugeben, in denen Callbacks stattfinden dürfen. Dies erlaubt Ihnen den Overhead durch die Behandlung von asynchronen Ereignissen zu minimieren. In der Vergangenheit zog das Kompilieren von PHP mit eingeschaltetem Pcntl immer diesen Overhead hinzu, egal ob ein Skript tatsächlich Pcntl verwendete oder nicht.

Es gibt eine Anpassung, die an allen Pcntl Skripten vor PHP Version 4.3.0 vorgenommen werden muss, damit diese weiterhin funktionieren. Entweder muss declare() für einen Abschnitt verwendet werden, in dem man Callbacks erlauben will, oder diese für das gesamte Skript aktivieren, indem man die neue, globale Syntax von declare() verwendet.

Hinweis: Diese Erweiterung steht auf Windows-Betriebssystemen nicht zur Verfügung.

add a note add a note

User Contributed Notes 1 note

up
4
sean dot kelly at mediatile dot com
2 years ago
The following statement left me searching for answers for about a day before I finally clued in:

"Process Control should not be enabled within a web server environment and unexpected results may happen if any Process Control functions are used within a web server environment."

At least for PHP 5.3.8 which I am using, and who knows how far back, it's not a matter of "should not", it's "can not". Even though I have compiled in PCNTL with --enable-pcntl, it turns out that it only compiles in to the CLI version of PHP, not the Apache module. As a result, I spent many hours trying to track down why function_exists('pcntl_fork') was returning false even though it compiled correctly. It turns out it returns true just fine from the CLI, and only returns false for HTTP requests. The same is true of ALL of the pcntl_*() functions.
To Top