SOP Lab 4
Kontrola procesów
Marzenie ministra sprawiedliwości
O procesach wspominałem już na wykładzie, dziś podejdziemy do nich od strony praktycznej. Procesy są podstawowymi jednostkami, które wykonują zadania w systemie operacyjnym, a każdy z nich może być jednoznacznie identyfikowany po swoim PID.
Procesy są izolowane od siebie i działają w swojej własnej przestrzeni adresowej pamięci, co oznacza, że nie mają dostępu do pamięci innych procesów, chyba że zostanie to specjalnie udostępnione.
Procesy mogą być uruchamiane i zarządzane przez użytkowników systemu, a także przez inne procesy lub demony systemowe. Każdy proces ma swoją prywatną przestrzeń adresową, która zawiera jego kod, dane, stos i stertę, a także informacje o jego stanie (np. stan wykonywania, priorytet, ustawienia systemowe).
Aby wylistować działające obecnie procesy użyjemy polecenia
ps
ps
- wyświetla listę procesów działających na systemie, wraz z ich identyfikatorami PID, stanem, priorytetem, czasem działania i innymi informacjami.top
- wyświetla dynamiczną listę procesów działających na systemie wraz z ich aktualnymi wartościami zasobów, takimi jak zużycie procesora, pamięci RAM, dysku i innych.kill
- pozwala na wysłanie sygnału do procesu, co może spowodować zakończenie jego działania. Można użyć identyfikatora PID lub nazwy procesu.killall
- pozwala na wysłanie sygnału do wszystkich procesów o określonej nazwie. Może to spowodować zakończenie działania wszystkich procesów o tej samej nazwie.nice
- pozwala na ustawienie priorytetu procesu. Domyślnie wszystkie procesy mają taki sam priorytet, ale można zmienić priorytet dla wybranych procesów.renice
- pozwala na zmianę priorytetu już uruchomionego procesu.bg
- pozwala na uruchomienie zatrzymanego procesu w tle.fg
- pozwala na przywrócenie procesu do działania w trybie interaktywnym.jobs
- wyświetla listę procesów działających w tle i zatrzymanych procesów, wraz z ich identyfikatorami i stanami.pstree
- wyświetla drzewo procesów, pokazując relacje między procesami i ich rodzicami.
Aby uruchomić proces “w tle” należy przy wywołującym poleceniu dopisać znak &
openttd &
Sygnały
Poleceniem kill
wysyłać do procesu możemy sygnały. Sygnały w systemie Linux to krótkie komunikaty przesyłane do procesów, aby powiadomić je o pewnych zdarzeniach lub żądaniach. Sygnały są wykorzystywane do komunikacji między procesami oraz do kontroli i zarządzania procesami.
System Linux obsługuje wiele różnych sygnałów, z których każdy ma swój unikalny numer identyfikacyjny. Sygnały można wysyłać do procesów za pomocą programów lub polecenia kill. Niektóre z najczęściej używanych sygnałów to:
- SIGINT (sygnał przerwania) - wysyłany do procesu, gdy użytkownik wciśnie klawisze Ctrl+C. Powoduje to przerwanie bieżącej operacji procesu.
- SIGKILL (sygnał zabójstwa) - wysyłany do procesu, aby natychmiastowo zakończyć jego działanie. Ten sygnał nie daje procesowi czasu na czyszczenie swojego stanu, a zamyka go natychmiastowo.
- SIGTERM (sygnał zakończenia) - wysyłany do procesu, aby poprosić go o zakończenie swojego działania. Ten sygnał pozwala procesowi na przeprowadzenie niezbędnych czynności przed zakończeniem.
- SIGHUP (sygnał hangup) - wysyłany do procesu, gdy użytkownik zamknie terminal. Powoduje to zakończenie procesu.
- SIGUSR1 i SIGUSR2 (sygnały użytkownika) - sygnały, które mogą być zdefiniowane i wysłane przez użytkownika w celu wywołania określonej funkcji w procesie.
- SIGPIPE (sygnał potoku) - wysyłany do procesu, gdy proces próbuje pisać do potoku, który został już zamknięty. Powoduje to zakończenie procesu.
Zadania do laboratorium
Poza zadaniem 5 aby rozliczyć dzisiejsze zadania wystarczy mi plik z wynikiem działania polecenia history
- Uruchom program (np. openttd) w tle za pomocą polecenia nohup i zweryfikuj jego działanie za pomocą polecenia
ps
. Zmień jego priorytet za pomocą polecenia renice, aby porównać wpływ na wydajność programu. Następnie użyj polecenia kill, aby zabić proces. - Uruchom program w tle za pomocą polecenia nohup i przekieruj jego wynik do pliku tekstowego.
- Użyj polecenia top lub htop, aby monitorować wykorzystanie zasobów przez różne procesy na twoim systemie. Zidentyfikuj procesy, które zużywają najwięcej pamięci lub mocy obliczeniowej, i zmień ich priorytet za pomocą polecenia renice.
- Zastosuj polecenie nice do uruchomienia programu z niższym priorytetem niż standardowy. Następnie wykonaj inne zadanie na komputerze i zaobserwuj, jak program działa w tle z niższym priorytetem.
- Uruchom dowolny proces, a następnie wstrzymaj jego wykonywanie za pomocą polecenia kill -STOP. Następnie wznów jego wykonywanie za pomocą polecenia kill -CONT.
- Utwórz skrypt, który automatycznie uruchamia program po starcie systemu. Następnie zrestartuj system i upewnij się, że program uruchamia się automatycznie - wujek google albo prowadzący podpowiedzą, w razie czego.