Ennek utána kellett néznem, mert ilyet csak C-ben írtam.
Ajánlom ezt és ezt. (végigolvasni!)
#!/bin/bash
do_nothing()
{
:
}
trap do_nothing SIGUSR1
echo "Sleeping. Pid=$$"
while :
do
sleep 10 &
SLEEP_PID=$!
wait $SLEEP_PID
if kill $SLEEP_PID >/dev/null 2>&1
then
echo "Caught SIGUSR1"
else
echo "Sleep over"
fi
done
Ez a programod modellje - lehet tolni tovább a lemonbar felé.
A program 30 másodpercenkén tesz egy kört és kiírja a "Sleep over" üzenetet. Ez a periodikus tevékenység helye.
Ha küldesz egy SUGUSR1-et, akkor megszakad a wait - a biztonság kedvéért kilövi a sleep-et - és a "Caught SIGUSR1" üzenetet írja ki. Ez a külső esemény hatására végzendő tevékenység helye - vagy a do_nothing.
A futás (a promptot kitöröltem, a > a kézzel kiadott paracsot jelenti):
>p &
[1] 1708
Sleeping. Pid=1708
Sleep over
>kill -USR1 1708
Caught SIGUSR1
Sleep over
>kill -USR1 1708
Caught SIGUSR1
>kill -USR1 1708
Caught SIGUSR1
>fg
Sleep over
./p
>^C