Wstęp

Dzień dobry, dziś przedstawię kilka informacji o procesach w systemie linux. Serdecznie zapraszam.

Definicja

Proces — program w trakcie wykonania. Działająca instancja jakiegoś programu

Typy procesów

  • Procesy interaktywne — procesy uruchomione i kontrolowane przez sesję konsoli. Nie są uruchamiane automatycznie przez system. Wymagane jest, by użytkownik ręcznie uruchomił program. Mogą wymagać wprowadzania danych od użytkownika
  • Procesy działające w tle — procesy kontrolowane i nie “przyczepione” do sesji konsoli. Mogą zostać uruchomione, przez mechanizmy systemu. Nie wymagają wprowadzania danych od użytkownika.

Jak system identyfikuje procesy?

W systemie może działać wielu użytkowników, wielu użytkowników może uruchamiać programy, a te mogą uruchamiać dalsze. By mieć możliwość operowania na procesach, system a właściwie sam kernel, przydziela każdemu procesowi jego identyfikator (PID). Każdy proces, który został uruchomiony przez inny program, posiada również identyfikator programu nadrzędnego (PPID).

W skrócie mamy dwa typy procesów:

  • Proces Rodzic/nadrzędny/pierwotny - proces, który tworzy inne procesy podczas swojego działania
  • Proces Dziecko/podrzędny/potomny - proces, który został stworzony, przez inny proces/program
  • Proces potomny może być jednocześnie procesem pierwotnym dla innego procesu

Proces Init

Proces Init. Można powiedzieć Matka wszystkich innych procesów. To on jest odpowiedzialny, za rozruch innych procesów. Jest to pierwszy program, który zostaje uruchomiony podczas rozruchu systemu. Zarządza on wszystkimi innymi procesami w systemie. Jest uruchamiany bezpośrednio przez kernel, więc proces ten nie ma procesu rodzica.

Proces init zawsze ma identyfikator 1 (PID=1).

Dodatkowo, jeśli jakiś proces zostanie “porzucony”, czyli program, który go uruchomił, wyłączy/zatrzyma się bez czyszczenia i wysłania sygnału zamknięcia do potomków. Proces Init będzie widniał jako PPID w “osieroconych” procesach. Powiedzmy, że init robi dodatkowo, za “rodzinę zastępczą”.

Gwoli przypomnienia “Procesem init” może być systemd,rc,init

Znajdowanie Identyfikatora procesu

Do uzyskania identyfikatora procesu, którego znamy, możemy wykorzystać komendę pidof:

pidof chronyd
pidof dhclient
pidof systemd

Untitled

By znaleźć identyfikator procesu oraz identyfikator rodzica, dla aktualnego procesu możemy skorzystać z:

echo $$
echo $PPID

Untitled

Procesy w tle

Aby uruchomić proces w tle (nie interaktywnie), musimy użyć znaku &. Proces taki, nie będzie pobierał danych od użytkownika, dopóki nie powróci na “pierwszy plan”. Innymi słowy, jeżeli program wymaga podani informacji od użytkownika, to program się w pewnym sensie zawiesi, dopóki nie otrzyma danych.

top &
jobs

Untitled

Możemy również wysłać proces w tło, poprzez wciśniecie kombinacji [ctrl+z] podczas pracy programu. Kombinacja ta wyśle do programu sygnał SIGSTOP, który zatrzyma program i wrzuci do tła, ale go nie zamknie.

tar -cf backup.tar /etc/*#wciśnij Ctrl+Z
jobs

Aby nas program kontynuował pracę w tle, musimy wykonać komendę bg . Komenda ta, wyśle sygnał SIGCONT do pierwszego programu z listy jobs, co spowoduje jego dalszą pracę.

bg

Aby przywrócić proces z tła, na pierwszy plan, wykonujemy komendę fg razem z jobid lub samą, dla pierwszego z kolejki.

jobs
fg %1

Untitled

Stany procesów

Podczas wykonywania, proces zmienia swój stan zależnie od wydarzeń w środowisku uruchomieniowym. W Linuxie procesy mogą mieć następujące stany:

  • Running - Proces, który jest wykonywany lub jest gotowy do wykonania
  • Waiting - Proces w tym stanie oczekuje na zdarzenie lub na zasoby systemowe
  • Stopped - Proces zatrzymany, zwykle po otrzymaniu sygnału lub zatrzymany przez debugger
  • Zombie - Proces nieżyjący, zatrzymany, ale pozostał wpis w tablicy procesów

Jak zobaczyć procesy

W różnych dystrybucjach linuxa mamy narzędzia, do wylistowania procesów uruchomionych na systemie. Najbardziej znanymi programami są ps oraz top

ps

Wyświetla informacje o procesach

It displays information about a selection of the active processes on the system as shown below:

ps
ps -e | head

Untitled

top

Bardzo przydatne narzędzie, do monitorowania systemu. Oferuje dynamiczny widok na procesy, działające w systemie:

 top

Untitled

glances

glances to narzędzie dość nowe, nie we wszystkich dystrybucjach, jest udostępniany jako pakiet. Osobiście bardzo lubię używać tego programu https://nicolargo.github.io/glances/:

glances

Untitled

Epilog

Na dziś wystarczy, mam nadzieję, że dowiedziałeś/łaś się czegoś nowego, albo odświeżyłeś/łaś sobie wiedzę. Tak czy inaczej, serdecznie Ci dziękuję, za przeczytanie tego posta. Jeśli masz potrzebę o cos zapytać, kontakt znajdziesz w zakładce “O Mnie”. A teraz życzę miłego dzionka i smacznej kawusi :) Do widzenia.