Signatur
Beschreibung
pcntl_signal_get_handler() liefert den Handler, der mit pcntl_signal() für das angegebene Signal registriert wurde. Dies ist nützlich, wenn man den aktuellen Signalhandler inspizieren, temporär ersetzen und später wiederherstellen möchte – ein typisches Muster bei Libraries, die Signale verwalten, ohne die Host-Anwendung zu stören.
Der Rückgabewert kann ein Closure- oder callable-Objekt sein (wenn ein PHP-Callback registriert wurde), der String 'SIG_DFL' oder 'SIG_IGN' (wenn der Standard- bzw. Ignore-Handler aktiv ist), oder die Integer-Konstanten SIG_DFL (0) bzw. SIG_IGN (1), sofern noch kein PHP-Handler gesetzt wurde.
Die Funktion ist Teil der pcntl-Erweiterung und steht daher nur auf POSIX-kompatiblen Betriebssystemen (Linux, macOS etc.) zur Verfügung. Unter Windows ist sie nicht verfügbar.
Typischer Einsatz: Vor dem Registrieren eines eigenen Handlers den alten sichern, um ihn am Ende wieder herzustellen – etwa bei Daemon-Prozessen, Testsystemen oder Frameworks, die Signalbehandlung kapseln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $signal Pflicht | int | Die Signalnummer, deren Handler abgerufen werden soll. Verwende die vordefinierten Konstanten wie SIGTERM, SIGINT, SIGUSR1 etc. |
Rückgabewert
Gibt einen der folgenden Werte zurück:
- Ein
Closure- oder sonstiges Callable-Objekt, wenn ein PHP-Handler viapcntl_signal()registriert wurde. - Den String
'SIG_DFL', wenn der System-Standardhandler nach vorherigem Setzen wiederhergestellt wurde. - Den String
'SIG_IGN', wenn das Signal ignoriert wird. - Die Integer-Konstante
SIG_DFL(0), wenn für das Signal noch nie ein PHP-Handler gesetzt wurde.
Beispiele
Aktuellen SIGTERM-Handler abrufen
<?php
// Zunächst keinen Handler gesetzt — Standard wird zurückgegeben
$handler = pcntl_signal_get_handler(SIGTERM);
var_dump($handler); // int(0) = SIG_DFL
// Eigenen Handler registrieren
pcntl_signal(SIGTERM, function (int $signo) {
echo "SIGTERM empfangen ($signo)\n";
});
$handler = pcntl_signal_get_handler(SIGTERM);
var_dump($handler); // object(Closure)
Handler sichern, überschreiben und wiederherstellen
<?php
// Alten Handler sichern
$oldHandler = pcntl_signal_get_handler(SIGUSR1);
// Temporären Handler setzen
pcntl_signal(SIGUSR1, function (int $signo) {
echo "Temporärer Handler für SIGUSR1\n";
});
// ... eigene Verarbeitung ...
// Alten Handler wiederherstellen
if ($oldHandler === SIG_DFL || $oldHandler === 0) {
pcntl_signal(SIGUSR1, SIG_DFL);
} elseif ($oldHandler === SIG_IGN || $oldHandler === 1) {
pcntl_signal(SIGUSR1, SIG_IGN);
} else {
pcntl_signal(SIGUSR1, $oldHandler);
}
echo "Ursprünglicher Handler wiederhergestellt.\n";
// Wichtig · Fallstricke
Plattform: Die Funktion ist nur auf POSIX-Systemen verfügbar (Linux, macOS). Unter Windows steht die gesamte pcntl-Erweiterung nicht zur Verfügung.
Async-Signal-Handling: Damit registrierte PHP-Callbacks tatsächlich ausgeführt werden, müssen entweder pcntl_async_signals(true) aktiviert sein oder pcntl_signal_dispatch() regelmäßig aufgerufen werden. pcntl_signal_get_handler() selbst führt keine Dispatching-Logik aus.
Rückgabewert-Prüfung: Da sowohl Integer-Werte (0, 1) als auch Strings ('SIG_DFL', 'SIG_IGN') möglich sind, empfiehlt sich ein strikter Vergleich mit === gegen die Konstanten SIG_DFL und SIG_IGN, um Typ-Verwirrungen zu vermeiden.