Bash Signalverarbeitung: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „==Signale bei der Programmierung der bash== Es existieren verschiedene Möglichkeiten, auf welchem Wege Signale gesendet werden können: # von aussen: ## Benu…“) |
|||
| Zeile 39: | Zeile 39: | ||
* Der Prozess ignoriert das Signal. (Ausnahme: SIGKILL) | * Der Prozess ignoriert das Signal. (Ausnahme: SIGKILL) | ||
* Der Prozess fängt das Signal ab, d.h. er leitet eine selbst definierte Reaktion ein. | * Der Prozess fängt das Signal ab, d.h. er leitet eine selbst definierte Reaktion ein. | ||
| + | ==Der Befehl trap == | ||
| + | '''Funktionen:''' | ||
| + | |||
| + | ;Signalbehandlung setzen | ||
| + | (Nach Beendigung der bash werden die betreffenden temporären Dateien gelöscht) | ||
| + | *trap 'rm *.tmp' 0 | ||
| + | *trap 'who; exit 1' 2 3 | ||
| + | |||
| + | ;Liefern von Informationen über gesetzte Signalbehandlung | ||
| + | *trap | ||
| + | |||
| + | ;Zurücksetzen der Signalbehandlung | ||
| + | *trap 2 3 | ||
| + | |||
| + | ;Import von Signalen | ||
| + | *trap : 2 3 | ||
| + | *trap '' 2 3 | ||
| + | |||
| + | ;Demonstriert die Funktion trap zum Abfangen von Signalen | ||
| + | <syntaxhighlight> | ||
| + | #!/bin/bash | ||
| + | trap 'echo trap ausgelöst' 2 | ||
| + | i=0 | ||
| + | while [ $i -lt 5 ] | ||
| + | do | ||
| + | echo "Bitte nicht stören!" | ||
| + | sleep 2 | ||
| + | i=`expr $i + 1` | ||
| + | done | ||
| + | </syntaxhighlight> | ||
| + | Bemerkung: Die Signalbehandlung selbst wird nicht an Kindprozesse weitervererbt. Das Ignorieren von Signalen hingegen wird weitervererbt. | ||
Version vom 24. Mai 2023, 18:36 Uhr
Signale bei der Programmierung der bash
Es existieren verschiedene Möglichkeiten, auf welchem Wege Signale gesendet werden können:
- von aussen:
- Benutzer (< DEL >, < CTRL >|, etc.)
- Prozesse (kill, alarm)
- von innen:
- Programmfehler (Adressfehler, ungültiger Befehl, Division durch 0, etc.)
Signale dienen der Interprozesskommunikation. Diese Nachrichten beschränken sich allerdings auf die Übertragung eines einzigen Wertes.
Von den Befehlen trap und kill werden folgende Signale verwendet:
| Signalnummer | Bedeutung |
|---|---|
| 0 | Beenden von bash |
| SIGHUP 1 | Logoff von einer Datensichtstation |
| SIGINT 2 | Drücken der Taste < DEL > |
| SIGQUIT 3 | Drücken der Taste < CTRL > + c |
| SIGKILL 9 | kill: unbedingter Prozessabbruch |
| SIGTERM 15 | Programmbeendigung |
Reaktion eines Prozesses auf den Empfang eines Signals
- Der Prozess beendet sich (meist Standardeinstellung).
- Der Prozess ignoriert das Signal. (Ausnahme: SIGKILL)
- Der Prozess fängt das Signal ab, d.h. er leitet eine selbst definierte Reaktion ein.
Der Befehl trap
Funktionen:
- Signalbehandlung setzen
(Nach Beendigung der bash werden die betreffenden temporären Dateien gelöscht)
- trap 'rm *.tmp' 0
- trap 'who; exit 1' 2 3
- Liefern von Informationen über gesetzte Signalbehandlung
- trap
- Zurücksetzen der Signalbehandlung
- trap 2 3
- Import von Signalen
- trap : 2 3
- trap 2 3
- Demonstriert die Funktion trap zum Abfangen von Signalen
#!/bin/bash
trap 'echo trap ausgelöst' 2
i=0
while [ $i -lt 5 ]
do
echo "Bitte nicht stören!"
sleep 2
i=`expr $i + 1`
doneBemerkung: Die Signalbehandlung selbst wird nicht an Kindprozesse weitervererbt. Das Ignorieren von Signalen hingegen wird weitervererbt.