Proces to działająca instancja programu — czyli kod, który załadowano do pamięci i właśnie się wykonuje. Sam plik wykonywalny leżący na dysku procesem jeszcze nie jest; staje się nim dopiero, gdy system operacyjny utworzy dla niego osobną przestrzeń adresową, przydzieli zasoby (pamięć, otwarte pliki, gniazda sieciowe) i zacznie podawać jego instrukcje procesorowi. Każdy proces dostaje unikalny numer identyfikacyjny — PID (Process ID) — po którym system go rozpoznaje i którym Ty się nim sterujesz.
Każdy proces ma własny stan wykonania: zawartość rejestrów, stos, licznik rozkazów (kto wykonuje którą instrukcję), zmienne i swój wycinek pamięci, do którego inne procesy normalnie nie mają wstępu. To izolacja — gdy jeden proces się wywróci, reszta systemu działa dalej. W Linuksie procesy tworzą drzewo: nowy proces powstaje przez sklonowanie istniejącego (wywołania fork() i exec()), więc każdy ma swojego rodzica. Korzeniem całego drzewa jest proces o PID 1 — kiedyś init, dziś najczęściej systemd.
Nie myl procesu z wątkiem. Wątki to lżejsze jednostki wykonania wewnątrz jednego procesu — współdzielą jego pamięć, podczas gdy osobne procesy są od siebie odgrodzone.
Jak to wygląda w praktyce
Najprościej podejrzysz procesy poleceniem ps aux albo interaktywnie przez top czy znacznie wygodniejszy htop. Zobaczysz tam kolumnę PID, zużycie CPU i pamięci oraz stan procesu (np. R — running, S — sleeping, Z — zombie). Gdy jakiś proces oszaleje i zżera procesor, znajdujesz jego PID i wysyłasz mu sygnał: kill 1234 prosi grzecznie o zakończenie (sygnał TERM), a kill -9 1234 ubija bezwarunkowo (sygnał KILL). Po nazwie zadziała pkill nazwa lub killall nazwa.
Częste pułapki
Po pierwsze: kill -9 to nie pierwszy wybór, tylko ostatni. Nie daje procesowi szansy na zamknięcie plików czy zapisanie stanu, więc używaj go dopiero gdy zwykły kill nie pomaga. Po drugie: proces zombie (stan Z) to nie problem do ubicia — to proces już zakończony, którego rodzic nie odebrał kodu wyjścia. Zombie nie zużywa zasobów; znika, gdy rodzic posprząta albo gdy sam rodzic zostanie zamknięty. Po trzecie: zabicie procesu rodzica nie zawsze ubija dzieci — osierocone procesy przejmuje PID 1.
Pojęcia powiązane: wątek (thread), PID, sygnał (signal), fork, demon (daemon), proces zombie, scheduler, systemd, przestrzeń adresowa.