#!/bin/bash
#
# Von py_signal.py gerufenes Shell-Skript, das die Vererbung von
# Signal-Handler-Einstellungen sowie deren Wirkung auf ein Bash-Skript
# demonstrieren soll.
#
# 25.2.2006

# PID des Skripts ausgeben
echo PID $0: $$

# Funktion, die die 3 relevanten Signale SIGWINCH, SIGUSR1 und SIGCHLD an die
# in $1 übergebene PID sendet
function sende_signale()
{
  echo sende SIGWINCH an PID $1
  kill -s SIGWINCH $1
  echo sende SIGUSR1 an PID $1
  kill -s SIGUSR1 $1
  echo sende SIGCHLD an PID $1
  kill -s SIGCHLD $1
}

# die 3 relevanten Signale an uns selbst senden;
# Bei SIGWINCH wird keine benutzereigene Funktion aufgerufen, weil diese ja in
# py_signal.py definiert war. Beim Start von py_signal.sh wurde der Handler auf
# SIG_DFL geändert, was bei SIGWINCH bedeutet, dass dieses Signal ignoriert
# wird. Da SIGUSR1 vom Eltern-Prozess und SIGCHLD standardmäßig ignoriert wird,
# werden letztlich alle 3 Signale ignoriert.
sende_signale $$

# 3 Signal-Handler installieren
trap 'echo SIGWINCH' SIGWINCH
trap 'echo SIGUSR1' SIGUSR1
trap 'echo SIGCHLD' SIGCHLD

# Trap-Liste ausgeben;
# SIGUSR1 kann nicht geändert werden, weil es vom Eltern-Prozess mit SIG_IGN
# vererbt wurde.
echo Trap-Liste
trap
echo '-----------'

# alle 3 Signale an uns selbst senden
sende_signale $$

# für alle 3 Signale die vererbten Handler reinstallieren
trap - SIGUSR1 SIGWINCH SIGCHLD

# Trap-Liste ausgeben;
# diese muss nun leer sein
echo Trap-Liste
trap
echo '-----------'

# alle 3 Signale an uns selbst senden
sende_signale $$

echo $0 Ende

