Skip to main content Link Menu Expand (external link) Document Search Copy Copied
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
  1. ps - wyświetla listę procesów działających na systemie, wraz z ich identyfikatorami PID, stanem, priorytetem, czasem działania i innymi informacjami.
  2. 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.
  3. 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.
  4. 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.
  5. nice - pozwala na ustawienie priorytetu procesu. Domyślnie wszystkie procesy mają taki sam priorytet, ale można zmienić priorytet dla wybranych procesów.
  6. renice - pozwala na zmianę priorytetu już uruchomionego procesu.
  7. bg - pozwala na uruchomienie zatrzymanego procesu w tle.
  8. fg - pozwala na przywrócenie procesu do działania w trybie interaktywnym.
  9. jobs - wyświetla listę procesów działających w tle i zatrzymanych procesów, wraz z ich identyfikatorami i stanami.
  10. 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

  1. 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.
  2. Uruchom program w tle za pomocą polecenia nohup i przekieruj jego wynik do pliku tekstowego.
  3. 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.
  4. 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.
  5. 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.
  6. 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.