Od momentu, gdy uruchamiasz Linuxa, w tle startuje cała masa procesów. Jedne pilnują usług systemowych, inne obsługują sesję użytkownika, a jeszcze inne odpowiadają za aplikacje, które sam uruchamiasz. Czasem wszystko działa spokojnie i niezauważalnie, a czasem jeden proces potrafi tak ochoczo zająć CPU albo RAM, że komputer zaczyna przypominać małą nagrzewnicę.
Jeśli system byłby orkiestrą, to procesy są instrumentami. Bez kontroli nad procesami robi się koncert życzeń: coś nagle zjada CPU, coś pożera RAM, a ważna usługa ginie w tłumie. Gdy ogarniesz zarządzanie procesami w Linuxie, staniesz się niczym dyrygent: szybciej zdiagnozujesz spowolnienia, i będziesz lepiej reagował na problemy z wydajnością i bezpieczeństwem.
Czym jest proces
Proces to działająca instancja programu, czyli program, który został uruchomiony i jest aktualnie wykonywany przez system. W Linuxie praktycznie każda akcja (uruchomienie aplikacji, polecenie w terminalu, skrypt, demon w tle) działa jako proces.
Każdy proces ma własny numer PID, czyli identyfikator procesu. To coś w rodzaju numeru rejestracyjnego: pozwala jednoznacznie wskazać konkretny proces w systemie.
Warto też rozróżnić trzy pojęcia, które początkującym często się mieszają: program, proces i usługa. Program to plik wykonywalny lub skrypt. Proces to działająca instancja programu. Usługa natomiast to zwykle proces lub grupa procesów uruchamianych w tle, najczęściej zarządzanych przez systemd.
Proces na pierwszym planie i w tle
Procesy mogą działać na pierwszym planie albo w tle. Gdy uruchamiasz polecenie i terminal czeka, aż się zakończy, mówimy o pracy na pierwszym planie. Taki proces “trzyma” terminal, więc dopóki się nie zakończy albo nie zostanie zatrzymany, nie możesz normalnie wpisywać kolejnych poleceń. To typowa sytuacja przy dłuższych poleceniach, takich jak kopiowanie, kompresja czy aktualizacja systemu.
Proces działający w tle nadal pracuje, ale nie blokuje Ci terminala. Dzięki temu możesz w tej samej sesji robić kolejne rzeczy, zamiast patrzeć, jak jedna komenda mieli przez kilka minut. To bardzo wygodne w codziennej pracy, szczególnie gdy wykonujesz coś, co trwa długo, ale nie wymaga Twojej ciągłej uwagi. Linux daje tutaj sporo wygodnych narzędzi, o których za chwilę.
Stany procesów – co oznaczają literki w top i ps?
Proces w Linuxie może znajdować się w różnych stanach, a ich oznaczenia najczęściej zobaczysz w poleceniach takich jak ps, top albo htop.
- R (Running) – proces aktualnie działa albo jest gotowy do działania
- S (Sleeping / Waiting) – proces śpi, czyli czeka na jakieś zdarzenie
- D (Uninterruptible sleep) – proces czeka zwykle na operację I/O, najczęściej związaną z dyskiem lub storage
- T (Stopped) – proces został zatrzymany, na przykład przez Ctrl+Z
- Z (Zombie) – proces się zakończył, ale jego rodzic nie odebrał jeszcze jego statusu zakończenia
Stan R nie oznacza, że proces przez cały czas aktywnie zjada CPU. Często oznacza po prostu, że jest gotowy do wykonania i czeka na swoją kolej. Stan S jest bardzo normalny, wiele procesów przez większość czasu właśnie czeka na jakieś zdarzenia. Nie każdy “śpiący” proces jest problemem. W rzeczywistości większość działających systemów ma sporo procesów w stanie S i to zupełnie normalne.
Warto zwrócić szczególną uwagę na stan D. Jeśli widzisz dużo procesów wiszących w D, może to sugerować problem z dyskiem,
Polecenia do pracy z procesami
Linux daje naprawdę sporo narzędzi do pracy z procesami. Jedne służą do szybkiego podejrzenia listy procesów, inne do monitorowania ich w czasie rzeczywistym, a jeszcze inne do wyszukiwania, zmiany priorytetu albo zakończenia działania.
ps aux – szybka lista procesów

Polecenie ps służy do wyświetlania aktualnie działających procesów. W przeciwieństwie do narzędzi “na żywo” pokazuje ono migawkę stanu systemu w danym momencie. Czyli dostajesz zdjęcie sytuacji, a nie transmisję na żywo.
Jednym z najczęściej używanych wariantów jest:
ps aux
Taki zapis pokazuje dużo przydatnych informacji, między innymi:
- USER – użytkownik, który uruchomił proces
- PID – identyfikator procesu
- %CPU – użycie procesora
- %MEM – użycie pamięci
- STAT – stan procesu
- COMMAND – polecenie, które uruchomiło proces
Dla początkujących bardzo ważne jest to, że ps aux potrafi być długie i mało wygodne przy dużej liczbie procesów. Dlatego często łączy się je z grep, sort albo awk, żeby szybko znaleźć coś konkretnego. Przykładowo, jeśli chcesz wyświetlić PID procesu, który aktualnie zużywa najwięcej pamięci RAM, możesz użyć:
ps aux | sort -k 4 | grep -v USER | tail -n 1 | awk '{print $2}'
top

Dużo ciekawszym narzędziem niż ps jest polecenie top. W przeciwieństwie do migawkowego podglądu pokazuje ono procesy na żywo, wraz z ich aktualnym zużyciem CPU, pamięci, stanem oraz wieloma innymi informacjami. To jedno z najważniejszych narzędzi diagnostycznych w Linuxie. Jeśli system nagle zwalnia i chcesz zobaczyć, co go właśnie przydusza, top jest bardzo dobrym pierwszym ruchem.
Uruchamiasz je po prostu poleceniem:
top
Na górze zobaczysz ogólne informacje o systemie: obciążenie, liczbę zadań, użycie CPU i pamięci. Poniżej znajduje się lista procesów, która odświeża się automatycznie.
W top można też sortować procesy i zmieniać sposób wyświetlania. W wielu wersjach przydają się klawisze:
- P – sortowanie po CPU
- M – sortowanie po pamięci
- T – sortowanie po czasie CPU
- k – wysłanie sygnału do procesu
- q – wyjście z programu
htop

Wygląda jak top, ale jest czytelniejszy, kolorowy, pozwala łatwo filtrować, sortować i zarządzać procesami z klawiatury. W przeciwieństwie do swojego poprzednika, htop prezentuje wskaźniki systemowe w bardziej intuicyjny i atrakcyjny wizualnie sposób. Przykładowo za pomocą klawiszy F7 i F8 możemy w łatwy sposób zwiększać lub zmniejszać priorytet dla określonego procesu. Od wielkości tej zależy jak dużo czasu procesor będzie poświęcał danemu procesowi.
Priorytety procesów: nice i renice
Nie wszystkie procesy są w systemie równie ważne. Jedne muszą reagować szybko, bo obsługują usługi albo interakcję użytkownika, a inne mogą spokojnie poczekać, bo robią coś ciężkiego, ale mało pilnego. Właśnie tutaj przydają się priorytety procesów, a konkretnie pojęcia nice i renice. Dzięki nim możesz wpływać na to, ile czasu procesora dany proces dostanie w kolejce planisty.
Wartość nice zwykle mieści się w zakresie od -20 do 19:
- wyższa wartość → proces jest mniej uprzywilejowany
- niższa wartość → proces jest bardziej uprzywilejowany
Domyślna wartość to zazwyczaj 0. Najważniejsze jest zrozumienie jednej rzeczy: większy nice nie oznacza większej ważności, tylko odwrotnie. Im wyższa liczba, tym proces jest “grzeczniejszy” wobec innych i dostaje mniej czasu procesora. To trochę mylące na początku, ale po chwili staje się logiczne.
Jeśli chcesz uruchomić od razu zadanie z niższym priorytetem, możesz użyć:
nice -n 19 tar -czf /root/home.tar.gz /home
To dobry pomysł w przypadku takich rzeczy jak backupy czy kompresja danych.
Jeśli proces już działa, jego priorytet możesz zmienić poleceniem:
renice 15 -p 1234
To bardzo praktyczne, gdy zauważysz, że jakiś ciężki proces przesadnie obciąża system. Zamiast od razu go zabijać, możesz po prostu uczynić go mniej nachalnym.
Jak znaleźć konkretny proces
Czasami nie chcesz oglądać całej listy procesów, tylko szybko znaleźć jeden konkretny. Dlatego warto znać kilka narzędzi, które robią to szybciej, czytelniej i wygodniej.
pgrep – znajdź PID po nazwie
Polecenie pgrep służy do wyszukiwania procesów po nazwie. Zamiast filtrować długą listę, po prostu pytasz system: “podaj mi PID procesu o tej nazwie”. To bardzo wygodne i czytelne. Dla prostych przypadków często jest lepsze niż ps aux | grep.
pgrep nginx
pstree – zobacz drzewo: kto jest czyim „dzieckiem”
Polecenie pstree pokazuje procesy w formie drzewa, czyli układu rodzic → dzieci. To bardzo przydatne, gdy chcesz zrozumieć, który proces uruchomił inne procesy. Przydaje się też w sytuacjach, gdy jedna aplikacja tworzy dużo potomków i chcesz ogarnąć, skąd się wzięły. Zwykła lista procesów nie zawsze pokazuje tę relację tak czytelnie.
pstree
pstree -p
pstree -p 1234
Wersja z -p pokazuje dodatkowo PID-y, co czyni wynik jeszcze bardziej praktycznym.
Kontrola zadań w terminalu
Zarządzanie procesami to jedno, ale w codziennej pracy bardzo ważna jest też kontrola zadań w terminalu. W praktyce wygląda to tak: uruchamiasz jakieś polecenie, ono działa dłużej, a Ty nie chcesz czekać bezczynnie. Chcesz wrócić do prompta, zrobić coś jeszcze, a potem ewentualnie wrócić do uruchomionego zadania. Linux bardzo dobrze sobie z tym radzi.
Tutaj warto pamiętać o rozróżnieniu:
- proces ma PID i istnieje w systemie
- job to zadanie widziane przez Twój shell i ma numer typu %1, %2
To rozróżnienie jest ważne, bo polecenia takie jak fg, bg i jobs działają właśnie na poziomie zadań w konkretnej sesji terminala. Dzięki temu możesz wygodnie przenosić zadania między pierwszym planem a tłem bez szukania PID-ów za każdym razem.
Uruchomienie polecenia w tle: &
Najprostszy sposób na uruchomienie procesu w tle to dopisanie na końcu polecenia znaku &. Dzięki temu shell od razu oddaje Ci terminal, możesz wpisywać kolejne komendy a proces działa dalej.

Lista zadań: jobs
Polecenie jobs pokazuje zadania uruchomione w ramach bieżącej sesji shella. Dzięki temu możesz szybko sprawdzić, co aktualnie działa w tle, co jest zatrzymane i jaki numer zadania został nadany przez shell.

Przeniesienie procesu na pierwszy plan: fg
Jeśli masz proces uruchomiony w tle albo zatrzymany, możesz przywrócić go na pierwszy plan poleceniem fg. Wtedy znowu przejmuje kontrolę nad terminalem i możesz obserwować jego działanie tak, jakby był uruchomiony normalnie od początku. To bardzo przydatne, gdy chcesz wrócić do zadania, które wcześniej odłożyłeś “na bok”.
fg %1
Aby zatrzymać proces działający na pierwszym planie, często używa się skrótu: Ctrl+Z. Zapamiętaj, że to nie zabija procesu. Ono go wstrzymuje, czyli przełącza do stanu zatrzymanego. Dzięki temu możesz później wznowić go w tle albo znowu na pierwszym planie.

Przywrócenie procesu w tle
Jeśli zatrzymałeś proces skrótem Ctrl+Z, możesz wznowić go w tle poleceniem bg. To świetna opcja, gdy coś uruchomiłeś, nie chcesz tego kończyć, ale jednocześnie potrzebujesz z powrotem terminala.

Kończenie procesów

Znając PID, możesz zakończyć działanie procesu. W Linuxie robi się to przez wysyłanie sygnałów, a nie tylko przez “brutalne zabijanie”. To ważne, bo nie każdy proces trzeba od razu traktować młotkiem. Czasem lepiej dać mu szansę zamknąć się porządnie, zapisać dane i posprzątać po sobie. W praktyce to po prostu bezpieczniejsze.
kill
Polecenie kill nie służy wyłącznie do kończenia procesów, mimo że nazwa sugeruje dość jednoznaczne intencje. Tak naprawdę wysyła ono sygnał do procesu, a sygnał może oznaczać różne rzeczy: zakończenie, przerwanie, przeładowanie konfiguracji albo inne zachowanie zależne od programu. Każdy sygnał ma unikalny numer i nazwę, co umożliwia precyzyjną kontrolę nad zarządzaniem procesami. Wszystkie sygnały jakie posiada polecenie kill można wylistować poniższym poleceniem.

Składnia polecenia kill jest bardzo prosta. Jako sygnał, który jest opcjonalny możemy podać wartość liczbową jednego z powyższych sygnałów. Jeśli nie podamy żadnego, domyślnie zostanie wybrany sygnał nr 15. Obowiązkową rzeczą, którą musimy wskazać jest identyfikator procesu (PID), do którego chcemy wysłać sygnał.
Najczęściej używane sygnały:
- 15 (SIGTERM) – „zakończ grzecznie” (domyślny)
- 9 (SIGKILL) – „kończymy temat siłowo” (proces nie ma szans posprzątać)
- 1 (SIGHUP) – często oznacza „przeładuj konfigurację” (zależy od programu)
Składnia:
kill -15 PID
kill -9 PID
psmisc i killall – zamykanie procesu po nazwie
Czasem nie chcesz szukać PID-u, tylko po prostu zakończyć proces po nazwie. W takich sytuacjach przydają się pkill oraz killall. Oba polecenia potrafią działać szybciej niż ręczne wyszukiwanie PID-ów, ale trzeba korzystać z nich ostrożnie. Jedno nieprecyzyjne dopasowanie i możesz zamknąć więcej, niż planowałeś. W niektórych dystrybucjach trzeba doinstalować pakiet psmisc.
pkill nginx
killall mc
Wirtualne terminale
W codziennej pracy administratora bardzo często zdarzają się polecenia, które działają długo. Mogą to być kopie plików, aktualizacje, skrypty, backupy albo różne operacje serwisowe. Problem pojawia się wtedy, gdy nie chcesz trzymać otwartego jednego terminala tylko po to, żeby obserwować postęp. Właśnie tutaj przydają się narzędzia takie jak screen i tmux.
screen
Polecenie screen służy do zarządzania wieloma sesjami terminala, które możesz w dowolnym momencie odłączyć i przywrócić później. Korzystając z tego polecenia można uruchomić dodatkowy terminal, wydać polecenie kopiowania danych i przenieść go w tło, dzięki czemu będzie można kontynuować pracę i wydawać kolejne polecenia. W każdej chwili można wrócić do takiego terminala i sprawdzić postęp. Na początek należy doinstalować aplikacje screen.
apt install screen
Aby uruchomić wirtualny terminal należy wydać polecenie screen
screen
W uruchomiony terminalu wydajemy jakieś polecenia przykładowo ls-la i przenosimy go w tło za pomocą kombinacji klawiszy CTRL+A potem D.
W każdej chwili możemy podejrzeć listę uruchomionych sesji, wydając polecenie:
screen -ls
Aby powrócić do wirtualnego terminala wydajemy polecenie .*
screen -r [nr terminala]
Aby wyjść całkowicie z terminala po prostu się wylogowujemy kombinacją klawiszy CTRL+D lub wpisujemy polecenie exit.
tmux
tmux to bardziej rozbudowane narzędzie niż screen. Oprócz odłączanych sesji pozwala też dzielić ekran na wiele paneli, przełączać się między nimi i budować naprawdę wygodne środowisko pracy.
apt install tmux
Tmux uruchamiamy w podobny sposób do polecenia screen wpisując po prostu jego nazwę. Gdy już znajdziesz się w tmuxie, jedyną rzeczą, która będzie wyraźnie inna, będzie obecny zielony pasek na dole. Aby wyjść należy wpisać polecenie exit.
tmux
Najważniejszą zasadą jest to, że wszystkie polecenia w tmux wymagają wciśnięcia skrótu.
Ctrl+b
Czyli wciskasz Ctrl+b, puszczasz i dopiero potem wciskasz właściwy klawisz komendy. Pełną ich listę znajdziesz łatwo w google.
Dzielenie ekranu na panele

Jedną z największych zalet tmux jest możliwość podziału okna na wiele paneli. Dzięki temu możesz mieć na jednym ekranie kilka terminali jednocześnie: w jednym obserwować logi, w drugim mieć htop, w trzecim edytować plik, a w czwartym testować połączenia.
Podstawowe skróty:
- Ctrl+b, potem % – podział pionowy
- Ctrl+b, potem “ – podział poziomy
Przełączanie między panelami:
- Ctrl+b, potem strzałki
Wyjście z tmux
Jeśli chcesz zakończyć tmux (zamknąć bieżącą sesję), możesz wpisać exit w każdym panelu, aż wszystko się zamknie.