Sygnaly

Obsługa sygnałow w Bashu sprowadza się do umiejętnego korzystania z polecenia trap

trap
Polecenie służy do przechwytywania sygnałów wysłanych do procesu skryptu. Listę sygnałów możemy zobaczyć wpisując w powłoce polecenie trap -l

Składnia:

trap <polecenie> <sygnał>

Uwaga: Pisząc zamiast polecenia myślnik przypisujemy sygnałowi domyślną akcję.

Przykład:

#!/bin/bash
trap 'echo "Jestem kuloodporny, strzelaj sobie ..."' SIGINT
trap 'echo "Teraz już nie jestem kulodporny, możesz mnie unicestwić"; trap - SIGINT' SIGHUP

while : ; do
  echo "Naciśnij ^C (ctrl+C) aby wyjść"
  sleep 5
done

Uwaga: Nie należy zapomnieć o pojedynczych cudzysłowach, choć nie są one niezbędne (kiedyś uzywano odwrotnych cudzysłowów)!
Uwaga: Do polecenia trap można przypisać dowolne polecenia a nawet funkcję! Co moze stwarzać bardzo duże możliwości.
Uwaga: Sygnał KILL (-9) nie może być zablokowany!

Pierwsze polecenie trap powoduje, że program na wysłanie sygnału SIGINT będzie reagował pierwszym komunikatem. Następna linijka mówi, że wysyłając sygnał SIGHUP skrypt również wypisze komunikat, ale też przypisze standardowe działanie dla sygnału SIGINT.

Tak więc początkowo naciskając klawisze ^C nie uda nam się zamknąć programu, ale wystarczy wysłać do procesu sygnał SIGHUP, by było to możliwe.

Aby wysłać do dowolnego procesu w systemie jakiś sygnał używamy polecenia kill kill. W naszym przypadku będzie to polecenie kill -SIGHUP PID, gdzie PID to numer identyfikacyjny naszego procesu, sprawdzimy to za pomocą polecenia ps x [patrz: man ps]. PID procesu jest podawany w pierwszej kolumnie, a który to proces znajdziemy po nazwie z ostatniej kolumny.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License