Przejdź do głównej zawartości

ps


  • ps (process status) – wyświetla listę bieżących procesów wraz z atrybutami (PID, PPID, użytkownik, CPU/RAM, stan, komenda itd.).
  • Zastosowania: szybka diagnostyka, wyszukiwanie procesów według użytkownika/TTY, analiza zużycia zasobów, wyciąganie metadanych do skryptów.
  • Dostępne w większości dystrybucji Linux (pakiet procps‑ng), a także w systemach BSD/macOS (składnia ma różnice) i na Uniksach POSIX.

Okno terminala
# GNU / procps‑ng (zalecane w skryptach)
ps [OPCJE‑UNIX] # np. ps -e -o pid,cmd --sort=-%cpu
# Składnia BSD (bez myślnika) – wygodna interaktywnie, mniej przenośna
ps [OPCJE‑BSD] # np. ps aux, ps axu --forest
  • Dwa style opcji:

    • UNIX/POSIX (z myślnikiem)-e, -o, -p, -u user.
    • BSD (bez myślnika)a, x, u, aux.
  • Do skryptów preferuj jawne kolumny -o i sortowanie --sort.


ParametrOpis
-e / -AWszystkie procesy (ang. every).
a (BSD)Procesy z TTY (nie tylko bieżącego użytkownika).
x (BSD)Uwzględnij procesy bez TTY (daemony). Często używane z aax.
uDWA znaczenia: w trybie BSD = format „user‑oriented”; w trybie UNIX -u <USER> = filtr po efektywnym UID.
-U <USER>Filtr po rzeczywistym UID.
-p <PID[,..]>Filtr po PID (lista lub zakresy).
-t <TTY[,..]>Filtr po TTY (np. pts/0, tty1).
-C <nazwa[,..]>Filtr po nazwie polecenia (bez ścieżki/argumentów).
-o <kol1[,kol2...]>Wybór kolumn/aliasów pól (np. pid,ppid,stat,%cpu,%mem,etime,cmd). Użyj = aby nadać nagłówek: -o pid=PID.
--sort <klucze>Sortuj po polach (np. pid, ppid, %cpu, %mem, etime, rss, vsz). Użyj - dla malejąco: --sort=-%cpu.
-f (UNIX)Format „full” z dodatkowymi kolumnami (PID, PPID, C, STIME, TTY, TIME, CMD).
--forestDrzewko ASCII zależności (ppid→pid) w kolumnie komendy.
-LPokaż wątki (LWP/TID). Często łączone z -p PID i -o pid,tid,stat,comm.
-l / lFormat „long” (zawiera m.in. PRI, NI, ADDR, SZ, WCHAN – zależnie od systemu).
-HWyświetl procesy z wątkami (hierarchicznie).
w / -wSzerokie wyjście (powtórz w by całkiem znieść ograniczenie szerokości).
-O <kol>Jak -o, ale dodaje kolumnę do domyślnych.
--no-headersBez nagłówków (przydatne do parsowania).

Przydatne pola -o (wybór): pid, ppid, pgid, sid, tty, uid, user, %cpu, %mem, rss, vsz, psr, pri, ni, stat, start, stime, time, etime, comm, args/cmd, tid (z -L).

Kod stanu STAT (skrót): R – running, S – sleeping, D – uninterruptible sleep (I/O), T – stopped/traced, Z – zombie, I – idle (kernel). Dodatki: + (na pierwszym planie), l (multithread), < (wysoki priorytet), N (niski), s (session leader), L (stronicowanie). Dokładny zestaw zależy od systemu.


Okno terminala
# 1) Klasyczny przegląd wszystkich procesów (BSD‑like)
ps aux | less -S
# Efekt: pełna lista (także bez TTY); przewijanie poziome w less.
Okno terminala
# 2) Przenośne: jawne kolumny i CPU‑top
ps -e -o pid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 15
# Efekt: top‑N najbardziej obciążających procesów.
Okno terminala
# 3) Tylko procesy użytkownika www-data z wybranymi polami
ps -u www-data -o pid,ppid,%cpu,%mem,stat,cmd --sort=-%cpu
# Efekt: procesy efektywnego użytkownika www-data.
Okno terminala
# 4) Wątki procesu (LWP/TID) i ich stan
ps -L -p 1234 -o pid,tid,psr,stat,pri,ni,comm
# Efekt: lista wątków procesu 1234 z CPU (psr) i priorytetem.
Okno terminala
# 5) Drzewko zależności (rodzic→dziecko) z czytelnymi kolumnami
ps -eo ppid,pid,stat,cmd --sort=ppid,pid --forest | less
# Efekt: hierarchia procesów z „gałązkami”.
Okno terminala
# 6) Dane gotowe do parsowania (bez nagłówków i z własnymi nazwami)
ps -e -o pid=PID,ppid=PPID,%cpu=CPU,%mem=MEM,comm=CMD --no-headers
# Efekt: stabilne CSV‑like do dalszej obróbki (awk, csvtool).
Okno terminala
# 7) Znajdź procesy o konkretnej nazwie polecenia
ps -C nginx -o pid,ppid,user,stat,etimes,cmd
# Efekt: tylko procesy, których COMMs to dokładnie „nginx”.

  • BSD vs UNIX: ps aux (BSD) ≠ ps -aux. Ta druga forma bywa traktowana „specjalnie”, ale historycznie oznaczała użytkownika o nazwie x. W skryptach unikaj mieszania stylów; preferuj ps -eo ....
  • Stabilność wyjścia: Nazwy kolumn i układ w stylu BSD zależą od terminala/locale. Dla niezawodnego parsowania używaj -o + --no-headers i jawnych nazw.
  • Uprawnienia: Bez roota część pól może być pusta lub zanonimizowana (np. dla cudzych procesów na niektórych systemach z ograniczeniami /proc).
  • %CPU i %MEM: To wartości chwilowe lub uśrednione wg ps; do ciągłego monitoringu lepsze są top, htop, pidstat.
  • Szerokość wiersza: Domyślnie ps przycina kolumnę cmd. Użyj -ww (podwójne wide) albo zapisz kompletne argumenty przez -o args w wąskim terminalu i przekieruj do pliku.
  • Nazwy pól: Pełna lista dostępnych specyfikatorów kolumn jest w man ps (sekcja STANDARD FORMAT SPECIFIERS).

Błąd / KomunikatPrzyczynaRozwiązanie
error: unsupported option / niespodziewane kolumnyMieszanie stylów BSD/UNIXUżyj spójnego stylu; do skryptów ps -e -o ... i --sort.
user name does not exist przy -u-u w trybie UNIX oczekuje użytkownika, nie „formatu u”Jeśli chcesz format użytkownika, użyj BSD stylu u bez myślnika albo jawnego -o.
bad -o argumentLiterówka w nazwie polaSprawdź listę specyfikatorów w man ps; popraw np. etime vs etimes.
Puste pola CMD/ARGSBrak uprawnień lub parametry prywatnościUruchom jako root albo ogranicz się do własnych procesów.
Obcięte linieZbyt wąskie wyjścieDodaj -w / -ww, przekieruj do less -S lub pliku.