Dieser Artikel beschreibt hauptsächlich Beispiele für Signalverarbeitungsmechanismen, die in PHP-Sprache geschrieben sind. Es hat einen gewissen Referenzwert.
function sig_handler($sig) { print("handled sig: $sig\n"); } pcntl_signal(SIGIO, "sig_handler"); posix_kill(posix_getpid(),SIGIO); while(true) { posix_kill(posix_getpid(),SIGIO); pcntl_signal_dispatch(); sleep(1); }
Es ist am besten, die Signalwarteschlange manuell zu durchlaufen, anstatt die von PHP bereitgestellten Signalverarbeitungsmechanismen wie „declare(ticks=1)“ und „tick_handler()“ zu verwenden tick-Mechanismus, jedes Mal, wenn eine Anweisung ausgeführt wird, wird tick_handler zurückgerufen, um zu sehen, ob ein Signal vorhanden ist, aber meistens gibt es kein Signal.
posix_signal legt die Rückrufverarbeitung des Signals fest.
posix_kill stellt das Signal nur in die Signalwarteschlange des Prozesses verarbeitet von pcntl_signal_dispatch.
posix_getpwnam("nginx"): Ruft die UID, GID und andere Informationen des Benutzernamens ab
pcntl_signal(SIGPIPE, SIG_IGN, false): Ignoriert die SIGPIPE Vom Kernel gesendetes Signal: Wenn die Verbindung geschlossen wurde, sendet der Prozess weiterhin Daten an den ungültigen Socket. Das System empfängt ein TCP-Paket mit dem RST-Steuerbit und das System sendet ein SIGPIPE-Signal an den Prozess, um dies mitzuteilen Prozess, dass die Verbindung getrennt wurde und kein weiterer Schreibvorgang erforderlich ist. Die Standardbehandlung dieses Signals besteht darin, den Prozess zu beenden, aber der Prozess kann es abfangen und das Signal ignorieren, um zu verhindern, dass er unfreiwillig beendet wird.
Socket-Kontextoptionen:
Backlog: Wird verwendet, um die Anzahl ausstehender Verbindungen in der Stream-Listening-Warteschlange zu begrenzen.
so_reuseport: Wiederverwendungsport (durch Kernel-Planung verbunden). ) Da der entsprechende Prozess durch Hashing gekennzeichnet ist, kann die Anzahl der Überwachungsprozesse nicht geändert werden.)
Timer-Signalverarbeitung
pcntl_signal(SIGALRM,"sig_handler"); pcntl_alarm(2); function sig_handler($sig) { echo "one second after"; } while (1) { pcntl_signal_dispatch(); sleep(1); }
Verwandt Tutorials: PHP-Programmierung vom Einstieg bis zur Beherrschung
Das obige ist der detaillierte Inhalt vonPHP lernt die Funktionsweise des Signalverarbeitungsmechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!