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.
Składnia
Dział zatytułowany „Składnia”# 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śnaps [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
.
- UNIX/POSIX (z myślnikiem) –
-
Do skryptów preferuj jawne kolumny
-o
i sortowanie--sort
.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
-e / -A | Wszystkie 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 a → ax . |
u | DWA 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). |
--forest | Drzewko ASCII zależności (ppid→pid) w kolumnie komendy. |
-L | Pokaż wątki (LWP/TID). Często łączone z -p PID i -o pid,tid,stat,comm . |
-l / l | Format „long” (zawiera m.in. PRI, NI, ADDR, SZ, WCHAN – zależnie od systemu). |
-H | Wyświetl procesy z wątkami (hierarchicznie). |
w / -w | Szerokie wyjście (powtórz w by całkiem znieść ograniczenie szerokości). |
-O <kol> | Jak -o , ale dodaje kolumnę do domyślnych. |
--no-headers | Bez 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.
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 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.
# 2) Przenośne: jawne kolumny i CPU‑topps -e -o pid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 15# Efekt: top‑N najbardziej obciążających procesów.
# 3) Tylko procesy użytkownika www-data z wybranymi polamips -u www-data -o pid,ppid,%cpu,%mem,stat,cmd --sort=-%cpu# Efekt: procesy efektywnego użytkownika www-data.
# 4) Wątki procesu (LWP/TID) i ich stanps -L -p 1234 -o pid,tid,psr,stat,pri,ni,comm# Efekt: lista wątków procesu 1234 z CPU (psr) i priorytetem.
# 5) Drzewko zależności (rodzic→dziecko) z czytelnymi kolumnamips -eo ppid,pid,stat,cmd --sort=ppid,pid --forest | less# Efekt: hierarchia procesów z „gałązkami”.
# 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).
# 7) Znajdź procesy o konkretnej nazwie poleceniaps -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 nazwiex
. W skryptach unikaj mieszania stylów; preferujps -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).
Najczęściej spotykane błędy i jak je naprawić
Dział zatytułowany „Najczęściej spotykane błędy i jak je naprawić”Błąd / Komunikat | Przyczyna | Rozwiązanie |
---|---|---|
error: unsupported option / niespodziewane kolumny | Mieszanie stylów BSD/UNIX | Uż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 argument | Literówka w nazwie pola | Sprawdź listę specyfikatorów w man ps ; popraw np. etime vs etimes . |
Puste pola CMD/ARGS | Brak uprawnień lub parametry prywatności | Uruchom jako root albo ogranicz się do własnych procesów. |
Obcięte linie | Zbyt wąskie wyjście | Dodaj -w / -ww , przekieruj do less -S lub pliku. |
Linki i źródła
Dział zatytułowany „Linki i źródła”- man ps (procps‑ng) – strona podręcznika z pełną listą pól i trybów.
- procps‑ng – repozytorium – źródła, dyskusje o opcjach.
- GNU/Linux – ps format specifiers – tabela pól
-o
. - FreeBSD ps(1) – różnice w trybie BSD.