Syntax:
trap [-lp] [[arg] signal_spec… ]oder
Falle [Aktion] [Signal]Schlüssel | Beschreibung |
-l | Es wird verwendet, um die Liste aller Signalnamen mit der entsprechenden Nummer anzuzeigen. |
-p | Es wird verwendet, um Signalbefehle oder Trap-Befehle für signal_spec anzuzeigen. |
arg | Es wird verwendet, um einen Befehl auszuführen, wenn die Shell das/die Signal(e) empfängt. |
signal_spec | Es enthält den Signalnamen oder die Signalnummer. |
- Trap-Befehl ohne Arg-Wert oder mit '-'-Arg-Wert setzt das angegebene Signal auf seinen ursprünglichen Wert zurück.
- Der Trap-Befehl mit dem Arg-Wert 'null' ignoriert das angegebene Signal, das von der Shell oder dem Befehl gesendet wird.
- Eine signal_spec mit dem Wert, Ausgang(0) führt arg aus, nachdem die Shell verlassen wurde.
- Eine signal_spec mit dem Wert debuggen führt arg vor jedem einzelnen Befehl aus.
- Eine signal_spec mit dem Wert Rückkehr führt arg jedes Mal aus, wenn eine Shell-Funktion ausgeführt wird oder ein Skript von „.”.
- Eine signal_spec mit dem Wert irren führt arg jedes Mal aus, wenn der Befehl fehlschlägt.
Trap-Befehl ohne Option und Argumente
Führen Sie den folgenden Befehl vom Terminal aus, um die Liste aller Befehle anzuzeigen, die mit jeder Bedingung verknüpft sind. Wenn zuvor kein 'trap'-Befehl gesetzt wurde, zeigt der folgende Befehl keine Informationen an.
$falleTrap-Befehl mit der Option -l
Führen Sie den folgenden Befehl vom Terminal aus, um die Liste aller Signalnamen mit Nummer anzuzeigen.
$falle -lDie Ausgabe des obigen Befehls zeigt die Liste der 64 Signale mit Zahlen an.
Trap-Befehl für ERR und EXIT setzen
Der folgende erste Befehl setzt einen 'Trap'-Befehl, der ausgeführt wird, wenn ein Shell-Fehler auftritt oder die Shell beendet wird. Dieser 'Falle'-Befehl wird entfernt temp.TXT Datei vom aktuellen Speicherort. Der Befehl 'ls' wird verwendet, um die temp.TXT Datei existiert oder nicht am aktuellen Speicherort. zuletzt Ausfahrt Befehl wird verwendet, um das Terminal zu schließen und den 'trap'-Befehl auszuführen, der zuvor gesetzt wurde.
$ trap 'rm temp.txt' Fehler beenden$ ls
$ beenden
Die folgende Ausgabe erscheint, nachdem Sie die obigen Befehle ausgeführt haben.
Wenn der Benutzer das Terminal nach dem Beenden erneut öffnet und den Befehl 'ls' ausführt, dann temp.TXT Datei wird nicht existieren.
Setzen Sie den 'Trap'-Befehl mit der Signalnummer von SIGUP, SIGQUIT und SIGKILL
Die Signalnummer von SIGUP, SIGQUIT und SIGKILL sind 1, 3 und 9. Der folgende erste Befehl setzt eine Falle für diese drei Signale. Wenn eines dieser Signale auftritt, wird die Meldung „Trap-Befehl wird ausgeführt” wird gedruckt. Führen Sie den folgenden Befehl über das Terminal aus.
$ trap 'echo Trap-Befehl ausgeführt' 1 3 9Wenn der Benutzer drückt Strg+C Um das Signal zu generieren, weisen Sie den Befehl 'trap' zu, dann die 'Echo' Befehl des Trap-Befehls wird ausgeführt und die folgende Ausgabe wird angezeigt.
Setze den 'trap'-Befehl für SIGTERM in einem Skript
SIGTERM Signal wird verwendet, um den Prozess sofort zu beenden, indem seine Ressourcen freigegeben werden. Erstellen Sie eine Bash-Datei mit dem Namen 'Trapskript.Sch' mit folgendem Code. Im Skript ist eine unendliche for-Schleife deklariert, die einen Text kontinuierlich ausgibt, bis SIGTERM Signal auftritt. Der Benutzer muss drücken Strg+Z generieren SIGTERM Signal.
Trapskript.Sch
#!/bin/bash# Setzen Sie eine Falle für SIGINT- und SIGTERM-Signale
trap "echo Das Programm wird beendet." SIGTERM SIGINT
#Nachricht anzeigen, um SIGTERM . zu generieren
echo "Drücken Sie Strg+Z, um den Vorgang zu stoppen"
#Zählervariable initialisieren, i
i=1
#unendlich für Schleife deklarieren
zum(;;)
tun
#Nachricht mit Zähler drucken i
echo „Läuft die Schleife für $i-mal“
#Erhöhe den Zähler um eins
((i++))
getan
Führen Sie das Skript aus, indem Sie den folgenden Befehl ausführen und zum Generieren Strg+Z drücken SIGTERM Signal. Die folgende ähnliche Ausgabe wird angezeigt.
$ bash trapscript.Sch
Setzen Sie einen 'Trap'-Befehl, um eine Funktion basierend auf einem bestimmten Signal auszuführen
Sie können einen 'Trap'-Befehl mit jeder benutzerdefinierten Funktion verknüpfen. Erstellen Sie eine Bash namens trapfunk.Sch und füge das folgende Skript hinzu. Hier eine benutzerdefinierte Funktion namens func() ist zum Drucken einer einfachen Nachricht deklariert, "Aufgabe erledigt". Eine for-in-Schleife ist definiert, um die Liste aller Dateien und Ordner des aktuellen Arbeitsverzeichnisses zu lesen und zu drucken. 'Falle' Befehl, der am Anfang der Liste definiert ist, ruft die Funktion auf, func() wenn das Programm endet.
trapfunk.Sch
#!/bin/bash# Funktion beim Beenden aufrufen
Trap-Funktion beenden
# Deklarieren Sie die Funktion
Funktion func()
echo "Aufgabe abgeschlossen"
# Lesen Sie die Dateien und Ordner der aktuellen Verzeichnisliste mit for loop
für ich in *
tun
echo "$i"
getan
Führen Sie das Skript über das Terminal aus.
Führen Sie das Skript aus.
$ bash trapfunc.SchDie folgende Ausgabe zeigt, dass, "Aufgabe erledigt” Text wird gedruckt, nachdem alle Dateien und Ordner des aktuellen Verzeichnisses gedruckt wurden.
Fazit
Dieses Tutorial zeigt, wie der Befehl 'trap' in Linux verwendet werden kann, um automatisierte Aufgaben basierend auf generierten Signalen auszuführen. Es hilft Benutzern, verschiedene Arten von Fehlern zu verfolgen und geeignete Maßnahmen zu ergreifen, die zuvor mit diesem Befehl zugewiesen werden können. Viele Programme oder Skripte weisen bestimmte Ressourcen zu, wenn sie im System ausgeführt werden. Wenn ein laufendes Programm oder Skript abnormal beendet oder beendet wird, werden die von diesem Programm verwendeten Ressourcen blockiert. Der Befehl 'trap' kann verwendet werden, um dieses Problem zu lösen. Die Ressourcenreinigungsaufgabe kann einfach mit diesem Befehl ausgeführt werden. Ich hoffe, der Leser bekommt nach dem Lesen dieses Tutorials eine klare Vorstellung von der Verwendung dieses Befehls.