1. (2p.) Zapoznaj się z programem ps (man ps). Wypróbuj dwa formaty wyświetlania rozszerzonych infomracji: -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.

    Ile Twoich procesów istniało w systemie w chwili przykładowego wywołania ps?

    Ile procesów sshd istniało w systemie (serwerze) w chwili wykonywania ćwiczenia (sprawdź polecenie pgrep)?

  2. (2p.) W jednym okienku terminala uruchom hierarchię co najmniej trzech procesów, tzn. procesy 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.

    W sprawozdaniu z wykonania zadania opisz tylko otrzymany wynik, nie wklejaj napisanych skryptów.

  3. (2p.) 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ć relizowane przez program cat.

  4. (2p.) Poleceniem mknod utwórz potok nazwany (FIFO). W co najmniej czterech okienkach wywołaj równoczesne pisanie do, i równoczesne czytanie z tego potoku przez wiele procesów (polecenie cat).

    Sprawdź (i podaj w raporcie) jak system rozdziela dane z pliku procesom o współdzielonym dostępie do tego potoku?

    Zabijając na przemian procesy piszące/czytające, zaobserwuj, kiedy proces cat czytający z potoku czeka na więcej danych, a kiedy kończy pracę. Analogicznie, kiedy proces piszący czeka w gotowości do dalszego pisania na potoku, a kiedy samoistnie kończy pracę. Podsumuj w raporcie.