(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.