Zad.1. (1 punkt - na zajęciach)
Zapoznaj się z programem ps
(man ps
). Wypróbuj dwa formaty
wyświetlania rozszerzonych informacji: -f
i -l
. Przeczytaj
podręcznik polecenia ps
aby zrozumieć wyświetlane parametry. Naucz
się wybierać zestaw procesów do wyświetlania argumentami opcjonalnymi
-u
, -t
, i -p
.
Odpowiedz:
ps
? Podaj wywołanie ps
wyświetlające te procesy.sshd
istniało w systemie (serwerze) w chwili wykonywania
ćwiczenia (sprawdź polecenie pgrep
)? Podaj wywołanie ps/pgrep
wyświetlające rozszerzoną informację o procesach, z nazwą użytkownika
i datą uruchomienia.Zad.2. (1 punkt - na zajęciach)
W jednym okienku terminala uruchom hierarchię co najmniej trzech procesów,
tzn. proces "A", który uruchomi proces potomny "B", który uruchomi proces
potomny "C". Mogą to być kolejno uruchamiane interpretery poleceń, albo
uruchamiające się kolejno skrypty lub programy. W innym oknie terminala
sprawdź programem ps
zależności potomków i rodziców w utworzonej
hierarchii.
Poleceniem kill
zabij proces w środku tej hierarchii ("B").
Sprawdź poleceniem ps
co pozostało z pierwotnych procesów, i czy
osierocony proces zostanie poprawnie adoptowany przez proces init
.
Zad.3. (6 punktów - na zajęciach, lub 2 punkty - w domu)
Zasymuluj działanie projektora i pilota. Pilot wyposażony jest w kilka
przycisków wysyłających sygnały sterujące projektorem. Utwórz:
pilot
, który przyjmuje jako argument numer procesu
projektora i pozwala użytkownikowi wysłać do projektora następujące
sygnały: SIGFPE
, SIGWINCH
, SIGUSR1
(polecenie kill
)projektor
, który będzie reagował na odbierane sygnały
(polecenie trap):
SIGFPE
- sygnał zostanie zignorowany przez projektor,SIGWINCH
- projektor wypisze na ekranie "WINDOWS CHANGE - redraw"
i będzie kontynuował działanie,SIGUSR1
- po pierwszym odebraniu sygnału, projektor wyświetli
komunikat "Czy na pewno chcesz wyłączyć?" i będzie oczekiwać
przez określony czas na drugi sygnał, który spowoduje wyłączenie
projektora. Po upływie czasu oczekiwania projektor będzie
kontynuował swoje działanie (można więc ponownie próbować
wyłączyć projektor, wysyłając sygnał SIGUSR1
dwukrotnie).Następnie:
SIGKILL
możesz zabić proces, a następnie
spróbuj go przechwycić w projektorze,SIGSTOP
możesz zatrzymać proces, a sygnałem
SIGCONT
go wznowić,SIGSTOP
daje taki sam efekt jak naciśnięcie
klawisza Ctrl+Z
na terminalu,SIGCONT
daje taki sam efekt jak wykonanie
polecenia fg
lub bg
(którego bardziej?).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
.
Zad.4. (2 punkty - na zajęciach, lub 1 punkt - w domu)
Uruchom potok co najmniej trzech poleceń działających przez jakiś
zauważalny czas. Mogą to być odpowiednio dobrane polecenia systemowe, lub
samodzielnie napisane skrypty. Sprawdź poleceniem ps
i odpowiedz
jakie zachodzi pokrewieństwo między tymi procesami (jeśli w ogóle zachodzi).
Wskazówka: ponieważ potok służy do przesyłania danych od procesu do
procesu, i synchronizuje pracę wszystkich procesów odpowiednio do
pojawiających się danych, dobrą metodą generowania demonstracyjnego potoku
jest umieszczenie na jego początku procesu, wysyłającego na swoje wyjście
stały strumień danych, np. piszącego w pętli co sekundę jakiś krótki
komunikat. Kolejne elementy potoku mogą być realizowane przez program
cat
.
W raporcie odpowiedz na postawione w zadaniu pytanie.
Zad.5. (2 punkty - w domu)
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?
Wskazówka: skutki obniżenia priorytetu łatwiej jest zaobserwować na starszej maszynie, z mniejszą liczbą procesorów/rdzeni. Spróbuj wykonać taki eksperyment na diablo, który ma tylko 8 fizycznych procesorów. Uruchom na nim silnie obliczeniowy proces np. w 10 (lub więcej) instancjach, i jednej z nich obniż priorytet. Obserwuj zużycie czasu cpu przez procesy. W tym celu przydaje się program top (naucz się ograniczyć go tylko do własnych procesów). Znajdź czas na wykonanie takiego eksperymentu kiedy podobnych działań nie wykonują inni. Ogranicz do minimum czas nadmiernego obciążania tej maszyny, i koniecznie posprzątaj po sobie - zakończ wszystkie testowo uruchomione procesy obliczeniowe.
W raporcie zwięźle opisz wykonane działania i otrzymane wyniki. Podaj polecenie obniżania priorytetu procesu.
Zad.6. (2 punkty - w domu)
Zapoznaj się z poleceniem ulimit
. Na początek ustaw ograniczenie liczby
procesów na 2 (ulimit -u 2
) i uruchom dowolny trywialny program,
np. ls
. Jaki jest wynik? Jak rozwiązać powstały problem?
Następnie ustaw limit procesów na nieco większą liczbę i napisz skrypt, który w nieskończonej pętli uruchamia kolejne kopie samego siebie w tle. 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.
W raporcie krótko opisz wykonane operacje (podaj polecenia) i uzyskane wyniki, w szczególności rozwiązanie powstałych problemów. Koniecznie posprzątaj po sobie - upewnij się, że zakończone zostały wszystkie testowo uruchamiane procesy!