( bucko | 2022. 05. 30., h – 09:08 )

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