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:
- 20 narzędzi wiersza poleceń do monitorowania wydajności systemu Linux
- 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:
- Przewodnik po poleceniach Kill, Pkill i Killall w celu zakończenia procesów systemu Linux
- 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.
- Zarządzanie procesami w systemie Linux: uruchamianie, zamykanie i wszystko pomiędzy
- Znajdź 15 procesów o najwyższym zużyciu pamięci, zaznaczając „górę” w trybie wsadowym
- Znajdź najczęściej działające procesy według najwyższego użycia pamięci i procesora w systemie Linux
- 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.