1. (2p.) Napisz skrypt, który w pętli będzie coś robił (np. co sekundę wypisywał bieżącą godzinę). Sprawdź wysyłanie do procesu różnych sygnałów poleceniem kill (SIGINT, SIGQUIT, ale także SIGFPE, SIGILL). Następnie rozbuduj skrypt o przechwytywanie tych sygnałów (trap) i sprawdź, że to działa, to znaczy, że tak napisanego procesu nie da się zabić tymi sygnałami. Sprawdź możliwość uśmiercenia sygnałem SIGKILL procesu, który przechwytuje wszystkie 15 podstawowych sygnałów.

    Uwaga: trap jest wbudowanym poleceniem shella, i jego wywołanie trochę się różni pod różnymi shellami. Najłatwiej jest wykonać to ćwiczenie przy użyciu Bourne shella (/bin/sh), ponieważ bash wykonuje różne potajemne zabiegi z obsługą sygnałów. Jednak polecenie trap w Bourne shellu jest prymitywne - czytaj 'man sh'.

  2. (2p.) Sprawdź możliwość zawieszania procesu sygnałem SIGSTOP i wznawiania sygnałem SIGCONT. Sprawdź, że sygnał SIGSTOP daje taki sam efekt jak naciśnięcie klawisza Ctrl+Z na terminalu. Sprawdź, że sygnał SIGCONT daje taki sam efekt jak wykonanie polecenia fg lub bg (którego bardziej?).

  3. (2p.) Zapoznaj się z poleceniem ulimit. Ustaw liczbę procesów na małą wartość i sprawdź, czy działanie jest respektowane. Następnie napisz skrypt, który w nieskończonej pętli uruchamia kolejne kopie samego siebie w tle. \textbf{Uruchom skrypt koniecznie w tej powłoce, w której ograniczyłeś/ograniczyłaś maksymalną liczbę procesów!} Następnie spróbuj opanować sytuację, czyli pozabijać wszystkie utworzone procesy i powrócić do normalnej pracy.

  4. (2p.) Sprawdź wartości priorytetów procesów i ich liczby nice, a następnie przećwicz obniżanie priorytetu pracującego w tle procesu (nice/renice). Czy potrafisz zademonstrować działanie obniżonego liczbą nice priorytetu?

    Podsumuj wynik w raporcie i podaj polecenie obniżania priorytetu procesu.