(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_signal — Richtet eine Signalverarbeitung ein
Die Funktion pcntl_signal() richtet eine neue Signalverarbeitung für das in signal
angegebene Signal ein oder ersetzt die aktuelle.
signal
Die Signalnummer.
handler
Die Signalverarbeitung. Dies ist entweder ein callable, das aufgerufen wird, um das Signal zu verarbeiten, oder eine der beiden globalen Konstanten SIG_IGN
oder SIG_DFL
, die das Signal ignorieren bzw. die Standard-Signalverarbeitung wiederherstellen.
Wird ein callable übergeben, muss es folgende Signatur haben:
signal
siginfo
Hinweis:
Es ist zu beachten, dass die Verwendung einer Objektmethode als Signalverarbeitung den Referenzzähler des Objekts erhöht, weshalb das Objekt bestehen bleibt, bis entweder die Verarbeitung geändert wird oder das Skript endet.
restart_syscalls
Gibt an, ob der Neustart von Systemaufrufen verwendet werden soll, wenn das Signal eintrifft.
Version | Beschreibung |
---|---|
7.1.0 | Von PHP 7.1.0 an wird der Signalverbeitung ein zweites Argument übergeben, das die siginfo des spezfischen Signals enthält. Diese Daten werden nur zur Verfügung gestellt, wenn das System die siginfo_t-Struktur kennt. Wenn das Betriebssystem siginfo_t nicht implementiert, wird null übergeben. |
Beispiel #1 pcntl_signal()-Beispiel
<?php
// Verwendung von Ticks benötigt
declare(ticks = 1);
// Signalverarbeitungsfunktion
function sig_handler($signo)
{
switch ($signo) {
case SIGTERM:
// Aufgaben zum Beenden bearbeiten
exit;
break;
case SIGHUP:
// Aufgaben zum Neustart bearbeiten
break;
case SIGUSR1:
echo "SIGUSR1 abgefangen...\n";
break;
default:
// Alle anderen Signale bearbeiten
}
}
echo "Richte neue Signalverarbeitung ein...\n";
// Signalverarbeitung einrichten
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
pcntl_signal(SIGUSR1, "sig_handler");
// oder ein Objekt verwenden
// pcntl_signal(SIGUSR1, array($obj, "do_something");
echo "Erzeuge signal SIGTERM an mich selbst...\n";
// sende SIGUSR1 an die aktuelle Prozess-ID
posix_kill(posix_getpid(), SIGUSR1);
echo "Fertig\n"
?>
pcntl_signal() stapelt Signalverarbeitungen nicht, sondern ersetzt sie.