Proces – egzemplarz wykonywanego programu. Aplikacja może składać się z większej liczby procesów. Każdy nowo powstały proces otrzymuje unikatowy numer, który go jednoznacznie identyfikuje, tzw. PID (od ang. process identifier).

W celu wykonania programu system operacyjny przydziela procesowi zasoby (pamięć, czas procesora i inne – szczegółowa lista zasobów znajduje się dalej), ale także może być konieczne współbieżne wykonywanie pewnych fragmentów programu. Aby to zrealizować, program może zażądać utworzenia określonej liczby wątków, wykonujących wskazane części programu – o ich współbieżne wykonanie dba system operacyjny (albo sam program, wówczas mówi się o zielonych wątkach). Wątki współdzielą prawie wszystkie zasoby zarezerwowane dla danego procesu, wyjątkiem jest czas procesora, który jest przydzielany indywidualnie każdemu wątkowi.

Za zarządzanie procesami odpowiada jądro systemu operacyjnego, sposób ich obsługi jest różny dla różnych systemów operacyjnych. W systemie operacyjnym każdy proces posiada proces nadrzędny, z kolei każdy proces może, poprzez wywołanie funkcji systemu operacyjnego, utworzyć swoje procesy potomne; w ten sposób tworzy się swego rodzaju drzewo procesów. Każdy proces otrzymuje od systemu operacyjnego odrębne zasoby, w tym odrębną przestrzeń adresową, listę otwartych plików, urządzeń itp.

W systemie Centos proces z PID 1 nazywa się systemd. To on jest rodzicem wszystkich procesów w systemie.

Lista procesów

Nadszedł czas, aby zapoznać się z podstawowymi poleceniami do zarządzania procesami.

Na początek pstree. Dzięki niemu zobaczysz zależności pomiędzy procesami, czyli kto jest dzieckiem a kto rodzicem.

Pstree

Każdy proces może znaleźć się w jednym z 4 stanów.

  • Running – proces działa poprawnie.
  • Sleeping – proces znajduje się w pamięci RAM, ale nie jest aktywny (nie działa).
  • Stopped – proces został zatrzymany przy pomocy Ctrl-Z, może zostać ponownie aktywowany przy pomocy polecenia fg .
  • Zombie – proces został uszkodzony i nie będzie działał już poprawnie.

Specjalnym typem procesu jest demon (ang. daemon), jest to proces uruchamiany automatycznie po starcie systemu, np. serwer www.

Dwoma głównymi poleceniami, które możesz wykorzystać do monitorowania procesów są top oraz ps.

Narzędzie top odświeża listę procesów co 5 sekund, dzięki czemu otrzymujesz najświeższe informacje o stanie systemu.

Fragment wyniku polecenia top

Jak widzisz top jest stosunkowo rozbudowane, poniżej krótki przegląd właściwości w nim dostępnych.

  • top – bieżąca godzina,
  • up – jak długo działa system,
  • user – ilu użytkowników obecnie jest zalogowanych,
  • load average – średnie obciążenie z 1, 5 oraz 15m,
  • tasks – liczba działających zadań (procesów) w systemie, z podziałem na ich typy (running, sleeping, stopped, zombie),
  • %CPU – obciążenie procesora, z dokładnym podziałem na kolejne właściwości: us – obciążenie od użytkownika, sy – obciążenie przez system, ni – procesy, których priorytet został dostosowany za pomocą nice, id – procesy zawieszone w systemie, wa – poziom systemu w trybie oczekiwania, hi – ilość czasu, w której system obsługuje sprzęt (sterowniki), zbyt wysoka wartość oznacza problem ze sterownikami, si – czas w którym system obsługiwał przerwania systemowe, st – ilość czasu procesora, który został przeznaczony na maszyny wirtualne,
  • MiB Mem – całkowita wielkość pamięci RAM, obecnie wolna, obecnie używana, cache dla operacji read/write,
  • MiB Swap – te same parametry w odniesieniu do swap (pliku wymiany)

Kolejnymi parametrami odnoszącymi się bezpośrednio do procesów są.

  • PIDunikalny numer procesu w systemie,
  • USER – nazwa użytkownika, który wystartował proces,
  • PR – każdy proces posiada swój priorytet, który można zmienić w zależności od potrzeb,
  • NI – procesy z tymi samymi priorytetami i tak muszą zostać wykonane w konkretnej kolejności i właśnie NI daje taką możliwość,
  • VIRT – wirtualna ilość przydzielonej pamięci do procesu, nie jest ona w żaden sposób powiązana z pamięcią fizyczną. Wszystkie procesy w systemie GNU/Linux mogą przydzielić do 32TB takiej pamięci,
  • RES – przydział pamięci (VIRT) z której proces obecnie korzysta,
  • SHARE – odnosi się do pamięci współdzielonej. Zazwyczaj są to biblioteki używane przez konkretny proces jak również przez inne procesy,
  • S – kolumna podaje status procesu,
  • % CPU – ta kolumna pokazuje procent cykli procesora, który był używany przez proces. Jest to również kolumna, która domyślnie sortuje u góry, najbardziej aktywny proces znajduje się na górze listy.
  • % MEM – odnosi się do procentu pamięci używanej przez proces.
  • TIME – Wskazuje skumulowany czas rzeczywisty, kiedy proces wykorzystywał procesor przez cały okres od jej rozpoczęcia,
  • COMMAND – Wskazuje polecenie, które zostało użyte do uruchomienia tego procesu

Drugim przydatnym poleceniem jest ps.

Fragment wyniku polecenia ps aux

Polecenia ps używa się głównie z dwoma zestawami przełączników.

ps aux – pokazuje wszystkie procesy w systemie (a – pokaże wszystkie procesy, u – pokaże użytkownika lub właściciela procesu, x – pokaże procesy, które nie były wykonane w terminalu )

ps -ef – wynik będzie identyczny jak w przypadku ps aux

ParametrOpis
USERUżytkownik który uruchomił proces
PIDUnikalny numer procesu (ID)
%CPUUżycie CPU dla tego procesu (w procentach)
%MEMUżycie fizycznej pamięci przez proces (w procentach)
VSZUżycie pamięci wirtualnej przez proces ( w bajtach)
RSSNiewymienna pamięć fizyczna używana przez ten proces (w KiB)
TTYTerminal, z którego ten proces jest uruchamiany. Znak zapytania (?) Oznacza, że ten proces nie jest uruchamiany z terminala.
STATStan procesu
STARTCzas i data rozpoczęcia procesu
TIMECałkowity czas procesora używany przez proces
COMMANDNazwa polecenia ze wszystkimi argumentami, które rozpoczęły ten proces
Własności polecenia ps

Poniżej dostępne kody statusu wraz z opisem

DProces jądra systemu, który wykonuje I/O
RProces uruchomiony
SProces oczekuje na ponowne uruchomienie
TProces zatrzymany
tProces zatrzymany przez debugger
wStronicowanie (nieważne od jądra 2.6.xx)
xProces w trybie „dead” (nie powinien być widoczny na liście)
ZProces zombie, bez rodzica
<Wysoki priorytet procesu
NNiski priorytet procesu
LBlokada w pamięci dla I/O
sLider sesji
lProces wielowątkowy
+Proces pierwszoplanowy
Statusy polecenia ps

Jednak nie musisz przebijać się przez wszystkie strony z wynikiem, aby otrzymać informacje odnośnie procesów konkretnego użytkownika lub grupy.

ps -U root -u root – pokaże wszystkie procesy użytkownika root na podstawie rzeczywistego ID użytkownika, efektywnego ID lub na podstawie nazwy użytkownika.

ps -FG syslog – lista procesów dla konkretnej grupy (-G) z dodatkowymi szczegółami(-F)

ps -eo pid, user, cmd – ps pozwala również filtrować dane, wskaż które kolumny Cię interesują przy pomocy -eo

Zarządzanie procesami

Fajnie, ale co gdy coś się „wykrzaczy”? Wtedy trzeba wiedzieć w jaki sposób wycinać procesy, które się po prostu zawiesiły.

Przydadzą się do tego 3 polecenia: kill, pkill, killall. Potrzebne będą również sygnały, które polecenia te wysyłają do procesu.

NazwaWartośćOpis
SIGHUP1Wymusza ponowne odczytanie konfiguracji bez faktycznego zatrzymywania procesu. Użyj go, aby zastosować zmiany w plikach konfiguracyjnych.
SIGKILL9Kończy proces natychmiast po otrzymaniu sygnału. Ryzykujesz utratę danych z otwartych plików podczas korzystania z tego sygnału. Używaj go tylko wtedy, gdy proces nie zatrzymuje się po wysłaniu sygnału 15.
SIGTERM15Prosisz proces, aby się zakończył, jednak często jest to nie wystarczające.
SIGUSR130Wysyła do procesu określony sygnał zdefiniowany przez użytkownika. Działa tylko wtedy, gdy zostało zdefiniowane w poleceniu.
Sygnały kill

Wiesz już jak wyświetlić procesy, jak możesz je zatrzymać, więc teraz wykorzystanie oraz różnice pomiędzy trzema poleceniami o których wcześniej wspomniałem.

kill [-9] 2345 2500 3090 – w taki sposób poprosisz ładnie o zamknięcie procesów (domyślny sygnał 15), jeżeli chcesz zrobić to natychmiast, użyj dodatkowo przełącznika -9 (bez nawiasów).

killall -u root – takie podejście pozwala na wyłączenie wszystkich procesów, które należą do konkretnego użytkownika (w tym przypadku root).

pkill – u root – zamknie wszystkie procesy dla użytkownika root, podobnie jak killall.

pkill -P 2090 – zamknie proces 2090 oraz co ważniejsze wszystkie jego pod procesy (dzieci).

Priorytety procesów

Czy można zmienić ważność procesu? Tak, przy pomocy polecenia (re)nice możesz dowolnie zarządzać priorytetem procesu. Zakres sterowania ważnością procesów, który możesz wykorzystać to przedział -20 do (+)19. Proces -20 jest zupełnie nie ważny, natomiast (+)19 jest najważniejszy. Takie podejście zmniejsza lub zwiększa przydział zasobów dla procesu.

UWAGA

Jeżeli proces już działa warto użyć polecenia renice, jeżeli dopiero ma wystartować bez problemu sprawdzi się polecenie nice.

nice -n 4 top – ważność procesu top zostanie zwiększony o 4.

renice -5 -u root – obniżenie od 5 priorytetu dla procesów użytkownika, w tym przypadku root.

renice -5 1891 – do zmiany priorytetu możesz użyć również PID.

Podsumowanie

Wpis oczywiście nie wyczerpuje tematu, ale mam nadzieję, że informacje w nim zawarte będą dla Ciebie przydatne. Zarządzanie procesami jest istotne w codziennej pracy, także warto się z tym zagadnieniem dobrze zapoznać.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

Droga Administratora IT.