Signal kezelés

Ez a minta kód a signal handling kategóriából való. Egy script meghív egy másik scriptet, majd várakozik 10 másodpercig, amíg a hívott script dolgozik a háttérben. Ezután küld neki egy üzenetet, és megvárja, amíg leáll.

test.sh

#!/bin/bash
SCRIPT_PID=$$
trap " STOPFLAG=true; echo \"signaled\"; kill -s TERM \$CALL_PID >/dev/null; " SIGALRM TERM SIGKILL SIGHUP SIGINT SIGQUIT
echo "signal registered"
./sub.sh >> sub.log 2>>sub_error.log &
CALL_PID=$!
echo "sub started with $CALL_PID PID"
echo "main sleep 10 second simulating other processes..."
sleep 10
[ -z "$STOPFLAG" ] && {
  kill -s SIGQUIT $SCRIPT_PID >/dev/null
}
wait $CALL_PID
[ $? -ne 0 ] && { echo "stop signal error"; exit; }
echo "sub.sh log content:"
cat *.log
rm *.log
echo "end of script $SCRIPT_PID"

sub.sh

#!/bin/bash
echo "sub started..."
trap " echo \"sub terminated\"; exit;" TERM SIGKILL SIGHUP SIGQUIT SIGINT
while true; do
  DT=`date`
  echo "$DT - sub sleep 2 minute..."
  sleep 2
done