pcntl_signal
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_signal — Richtet eine Signalverarbeitung ein
Beschreibung
Die Funktion pcntl_signal() richtet eine neue
Signalverarbeitung für das in signal
angegebene
Signal ein oder ersetzt die aktuelle.
Parameter-Liste
-
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
oderSIG_DFL
, die das Signal ignorieren bzw. die Standard-Signalverarbeitung wiederherstellen.Wird ein callable übergeben, muss es folgende Signatur haben:
-
signal
- Das zu verarbeitende Signal.
-
siginfo
- Unterstützt das Betriebssystem siginfo_t-Strukturen, ist dies ein Array von Signalinformationen, die vom Signal abhängen.
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.
Rückgabewerte
Gibt bei Erfolg true
zurück. Bei einem Fehler wird false
zurückgegeben.
Changelog
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.
|
Beispiele
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"
?>
Anmerkungen
pcntl_signal() stapelt Signalverarbeitungen nicht, sondern ersetzt sie.
Siehe auch
- pcntl_fork() - Verzweigt den laufenden Prozess
- pcntl_waitpid() - Wartet auf ein oder gibt den Status eines abgezweigten Kindes zurück