• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Signal nur einmal akzeptieren

Wie kann ich mir ein Skript schreiben das ein gesendetes Signal nur einmal akzeptiert?
Mein Skript sieht bis jetzt so aus:

Code:
#! /bin/bash
# 2 5 9 19
# Signale 9 (SIGKILL) und 19 (SIGSTOP) werden von OS verarbeitet.

trap  ' echo "Signal 2 (SIGINT) erhalten - wird ignoriert"; '  2
trap  ' echo "Signal 5 (SIGTRAP)  erhalten - wird ignoriert"; '  5
trap  ' echo "Signal 9 (SIGKILL) erhalten - wird ignoriert"; '  9
trap  ' echo "Signal 19 (SIGCONT) erhalten - wird ignoriert"; ' 19

for i in 1 2 3 4 5 6 7 8 9 0; do

   echo "Przedur läuft... "
   echo "ctrl+c"
   echo "ctrl+s"
   sleep 5;

done

Die Signale werden jedoch immer ignoriert. Wie kann ich das Skript so erweitern das ein Signal nur einmal ignoriert wird?
 
A

Anonymous

Gast
Code:
#! /bin/bash
# 2 5 9 19
# Signale 9 (SIGKILL) und 19 (SIGSTOP) werden von OS verarbeitet.

function signal2()
{
 echo "Signal 2 (SIGINT) erhalten - wird ignoriert"
 trap '-' 2
}

trap  'signal2'  2
trap  ' echo "Signal 5 (SIGTRAP)  erhalten - wird ignoriert"; '  5
trap  ' echo "Signal 9 (SIGKILL) erhalten - wird ignoriert"; '  9
trap  ' echo "Signal 19 (SIGCONT) erhalten - wird ignoriert"; ' 19

for i in 1 2 3 4 5 6 7 8 9 0; do

   echo "Przedur läuft... "
   echo "ctrl+c"
   echo "ctrl+s"
   sleep 5;

done

Versuchs mal mit dieser Methode
aber Signal 9 abfangen :?: in scripten dürften einige Signale nicht gehen.

robi
 
Das funktionert. Weiß nur nicht warum der Prozess jetzt beim erhalt des 2 Signals terminiert :?:
Kann mir das jemand erklären?
 
A

Anonymous

Gast
Beim ersten Signal wird die Funktion aufgerufen und innerhalb der Funktion wird dann wird wieder das default Handling für dieses Signal eingeschalten und damit wird dann beim 2 Mal bei diesem Singal nicht in die Funktion verzweigt sondern das script beendet.

robi
 
Oben