Wyszukiwanie w witrynie

Wszystko, co musisz wiedzieć o procesach w systemie Linux [Kompleksowy przewodnik]


W tym artykule omówimy podstawowe zrozumienie procesów i pokrótce przyjrzymy się, jak zarządzać procesami w systemie Linux za pomocą określonych poleceń.

Proces oznacza wykonywany program; jest to działająca instancja programu. Składa się z instrukcji programu, danych odczytanych z plików, innych programów lub danych wejściowych od użytkownika systemu.

Rodzaje procesów

W Linuksie istnieją zasadniczo dwa typy procesów:

  • Procesy na pierwszym planie (nazywane również procesami interaktywnymi) – są inicjowane i kontrolowane poprzez sesję terminala. Innymi słowy, aby uruchomić takie procesy, do systemu musi być podłączony użytkownik; nie uruchomiły się automatycznie w ramach funkcji/usług systemu.
  • Procesy działające w tle (nazywane również procesami nieinteraktywnymi/automatycznymi) – to procesy, które nie są podłączone do terminala; nie oczekują żadnego wkładu użytkownika.

Czym są demony

Są to specjalne typy procesów działających w tle, które rozpoczynają się wraz ze startem systemu i działają wiecznie jako usługa; nie umierają. Są uruchamiane jako zadania systemowe (uruchamiane jako usługi) spontanicznie. Jednakże użytkownik może nimi sterować poprzez proces inicjowania.

Tworzenie procesów w systemie Linux

Nowy proces jest zwykle tworzony, gdy istniejący proces tworzy w pamięci dokładną kopię samego siebie. Proces potomny będzie miał to samo środowisko co jego rodzic, ale inny będzie tylko numer identyfikacyjny procesu.

Istnieją dwa konwencjonalne sposoby tworzenia nowego procesu w systemie Linux:

  • Korzystanie z funkcji System() – ta metoda jest stosunkowo prosta, jednak jest nieefektywna i niesie ze sobą znaczne ryzyko bezpieczeństwa.
  • Korzystanie z funkcji fork() i exec() – ta technika jest nieco zaawansowana, ale zapewnia większą elastyczność, szybkość i bezpieczeństwo.

Jak Linux identyfikuje procesy?

Ponieważ Linux jest systemem wielu użytkowników, co oznacza, że różni użytkownicy mogą uruchamiać w systemie różne programy, każda działająca instancja programu musi być jednoznacznie identyfikowana przez jądro.

Program jest identyfikowany na podstawie identyfikatora procesu (PID), a także identyfikatora procesu nadrzędnego (PPID), dlatego procesy można dalej podzielić na:

  • Procesy nadrzędne – są to procesy, które w czasie wykonywania tworzą inne procesy.
  • Procesy potomne – te procesy są tworzone przez inne procesy w czasie wykonywania.

Proces początkowy

Proces Init jest matką (rodzicem) wszystkich procesów w systemie, jest to pierwszy program wykonywany podczas uruchamiania systemu Linux; zarządza wszystkimi innymi procesami w systemie. Jest uruchamiany przez samo jądro, więc w zasadzie nie ma procesu nadrzędnego.

Proces inicjujący ma zawsze identyfikator procesu 1. Pełni funkcję rodzica adopcyjnego dla wszystkich osieroconych procesów.

Aby znaleźć identyfikator procesu, możesz użyć polecenie pidof:

pidof systemd
pidof top
pidof httpd

Aby znaleźć identyfikator procesu i identyfikator procesu nadrzędnego bieżącej powłoki, uruchom:

echo $$
echo $PPID

Uruchamianie procesu w systemie Linux

Po uruchomieniu polecenia lub programu (na przykład cloudcmd – CloudCommander) rozpocznie się proces w systemie. Możesz uruchomić proces pierwszoplanowy (interaktywny) w następujący sposób, zostanie on podłączony do terminala i użytkownik będzie mógł go wprowadzić:

cloudcmd

Zadania w tle systemu Linux

Aby uruchomić proces w tle (nieinteraktywny), użyj symbolu &. Tutaj proces nie czyta danych wejściowych od użytkownika, dopóki nie zostaną przeniesione na pierwszy plan.

cloudcmd &
jobs

Możesz także odesłać proces do tła, zawieszając go za pomocą [Ctrl + Z], co wyśle do procesu sygnał SIGSTOP, zatrzymując w ten sposób jego działanie; staje się bezczynny:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Aby kontynuować wykonywanie zawieszonego powyżej polecenia w tle, użyj polecenia bg:

bg

Aby wysłać proces w tle na pierwszy plan, użyj polecenia fg razem z identyfikatorem zadania w następujący sposób:

jobs
fg %1

Może Cię również zainteresować: Jak uruchomić polecenie systemu Linux w tle i odłączyć proces w terminalu

Stany procesu w systemie Linux

Podczas wykonywania proces przechodzi z jednego stanu do drugiego w zależności od jego środowiska/okoliczności. W systemie Linux proces może przyjmować następujące stany:

  • Uruchomiony – tutaj albo działa (jest to bieżący proces w systemie), albo jest gotowy do uruchomienia (czeka na przypisanie do jednego z procesorów).
  • Oczekiwanie – w tym stanie proces oczekuje na wystąpienie zdarzenia lub na zasób systemowy. Dodatkowo jądro rozróżnia również dwa typy procesów oczekujących; procesy oczekiwania przerywalne – mogą być przerywane sygnałami, a procesy oczekiwania nieprzerywalnego – oczekują bezpośrednio na warunki sprzętowe i nie mogą zostać przerwane przez żadne zdarzenie/sygnał.
  • Zatrzymany – w tym stanie proces został zatrzymany, zwykle poprzez odebranie sygnału. Na przykład proces, który jest debugowany.
  • Zombie – tutaj proces jest martwy, został zatrzymany, ale nadal ma wpis w tabeli procesów.

Jak wyświetlić aktywne procesy w systemie Linux

Istnieje kilka narzędzi Linux do przeglądania/listy uruchomionych procesów w systemie. Dwa tradycyjne i dobrze znane to polecenia ps i top:

1. ps Polecenie

Wyświetla informacje o wybranych aktywnych procesach w systemie, jak pokazano poniżej:

ps 
ps -e | head 

2. u góry – Narzędzie do monitorowania systemu

top to potężne narzędzie, które oferuje dynamiczny widok działającego systemu w czasie rzeczywistym, jak pokazano na zrzucie ekranu poniżej:

top 

Przeczytaj to, aby uzyskać więcej najlepszych przykładów użycia: 12 najlepszych przykładów poleceń w systemie Linux

3. spojrzenia – Narzędzie do monitorowania systemu

spojrzenia to stosunkowo nowe narzędzie do monitorowania systemu z zaawansowanymi funkcjami:

glances

Aby uzyskać wyczerpujący przewodnik użytkowania, przeczytaj: Spojrzenia – zaawansowane narzędzie do monitorowania systemu w czasie rzeczywistym dla systemu Linux

Istnieje kilka innych przydatnych narzędzi do monitorowania systemu Linux, których możesz użyć do wyświetlenia listy aktywnych procesów. Otwórz poniższy link, aby przeczytać o nich więcej:

  1. 20 narzędzi wiersza poleceń do monitorowania wydajności systemu Linux
  2. 13 bardziej przydatnych narzędzi do monitorowania systemu Linux

Jak kontrolować procesy w systemie Linux

Linux ma również kilka poleceń do kontrolowania procesów, takich jak kill, pkill, pgrep i killall. Poniżej znajduje się kilka podstawowych przykładów ich użycia:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Aby dowiedzieć się, jak szczegółowo korzystać z tych poleceń, aby zabić/zakończyć aktywne procesy w systemie Linux, otwórz poniższe łącza:

  1. Przewodnik po poleceniach Kill, Pkill i Killall w celu zakończenia procesów systemu Linux
  2. Jak znaleźć i zabić działające procesy w systemie Linux

Pamiętaj, że możesz ich użyć do zamknięcia nieodpowiadających aplikacji w systemie Linux, gdy system się zawiesza.

Wysyłanie sygnałów do procesów

Podstawowym sposobem kontrolowania procesów w Linuksie jest wysyłanie do nich sygnałów. Istnieje wiele sygnałów, które można wysłać do procesu, aby wyświetlić wszystkie uruchomione sygnały:

kill -l

Aby wysłać sygnał do procesu, użyj poleceń kill, pkill lub pgrep, o których wspominaliśmy wcześniej. Ale programy mogą reagować na sygnały tylko wtedy, gdy są zaprogramowane do rozpoznawania tych sygnałów.

Większość sygnałów jest przeznaczona do użytku wewnętrznego systemu lub dla programistów podczas pisania kodu. Poniżej przedstawiono sygnały przydatne użytkownikowi systemu:

  • SIGHUP 1 – wysyłany do procesu, gdy jego terminal sterujący jest zamknięty.
  • SIGINT 2 – wysyłany do procesu przez jego terminal sterujący, gdy użytkownik przerwie proces naciskając [Ctrl+C].
  • SIGQUIT 3 – wysyłany do procesu, jeśli użytkownik wyśle sygnał zakończenia [Ctrl+D].
  • SIGKILL 9 – sygnał ten natychmiast kończy (zabija) proces i proces nie będzie wykonywał żadnych operacji czyszczących.
  • SIGTERM 15 – jest to sygnał zakończenia programu (kill domyślnie to wyśle).
  • SIGTSTP 20 – wysyłany do procesu przez terminal sterujący w celu zażądania jego zatrzymania (zatrzymanie terminala); inicjowane przez naciśnięcie przez użytkownika [Ctrl+Z].

Poniżej znajdują się przykłady poleceń kill, które powodują zamknięcie aplikacji Firefox przy użyciu jej identyfikatora PID po jej zawieszeniu:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Aby zabić aplikację, używając jej nazwy, użyj pkill lub killall w następujący sposób:

pkill firefox
killall firefox 

Zmiana priorytetu procesu w systemie Linux

W systemie Linux wszystkie aktywne procesy mają priorytet i pewną wartość. Procesy o wyższym priorytecie zwykle otrzymają więcej czasu procesora niż procesy o niższym priorytecie.

Jednakże użytkownik systemu z uprawnieniami root może na to wpłynąć za pomocą poleceń nice i renice.

Z wyniku polecenia top NI pokazuje wartość nice procesu:

top  

Użyj polecenia nice, aby ustawić wartość nice dla procesu. Należy pamiętać, że zwykli użytkownicy mogą przypisać wartości od zera do 20 swoim procesom.
Tylko użytkownik root może używać ujemnych wartości nice.

Aby zmienić priorytet procesu, użyj polecenia renice w następujący sposób:

renice +8  2687
renice +8  2103

Sprawdź nasze przydatne artykuły na temat zarządzania i kontrolowania procesów w systemie Linux.

  1. Zarządzanie procesami w systemie Linux: uruchamianie, zamykanie i wszystko pomiędzy
  2. Znajdź 15 procesów o najwyższym zużyciu pamięci, zaznaczając „górę” w trybie wsadowym
  3. Znajdź najczęściej działające procesy według najwyższego użycia pamięci i procesora w systemie Linux
  4. Jak znaleźć nazwę procesu za pomocą numeru PID w systemie Linux

To wszystko na teraz! Jeśli masz jakieś pytania lub dodatkowe pomysły, podziel się nimi z nami za pomocą poniższego formularza opinii.