Co je příkaz ps v Linuxu?
Příkaz ps v Linuxu se používá k zobrazení informací o běžících procesech v systému. Můžete získat informace jako ID procesu (PID) pro procesy, které vy nebo kterýkoli jiný uživatel běží na stejném systému Linux.
Příkaz ps je sám o sobě rozsáhlým nástrojem a má více než 80 možností příkazů. Můžete pochopit jeho sílu a složitost. To je důvod, proč vám ukážu některé z nejběžnějších a nejužitečnějších příkladů příkazu ps v Linuxu.
Základní použití příkazu ps v Linuxu
Pokud v Linuxu použijete příkaz ps bez jakýchkoli voleb, zobrazí běžící procesy v aktuálním shellu:
ps
Toto je výstup. Odeslal jsem příkaz Gedit na pozadí, proto ukazuje tři procesy, jinak normálně uvidíte jen ps a bash.
PID TTY TIME CMD
503 pts/0 00:00:00 gedit
2053 pts/0 00:00:00 ps
31585 pts/0 00:00:00 bash
Zde:
- PID je jedinečné ID procesu procesu
- TTY je typ uživatele terminálu, ke kterému je přihlášen. pts znamená pseudo terminál
- ČAS udává, jak dlouho proces běží
- CMD je příkaz, který spustíte ke spuštění procesu
Nyní to ve skutečnosti neposkytuje žádné skutečné, užitečné informace. Podívejme se na některé lepší příklady příkazu ps:
1. Podívejte se na všechny běžící procesy
Pokud chcete vidět všechny procesy, které spouštíte, můžete použít příkaz ps s možností x takto:
ps -x
Možnost x zobrazí všechny procesy, i když nejsou spojeny s aktuálním tty (typ terminálu) nebo pokud nemají řídicí terminál (jako démoni).
Možnost – před x je volitelná, ale obecnou konvencí Linuxu je používat možnosti – před, takže vám doporučuji, abyste ji nadále dodržovali. Neublíží vám to.
Takto vypadá výstup. Výstup jsem zkrátil, protože měl stovky řádků:
PID TTY STAT TIME COMMAND
503 pts/0 Sl 0:00 gedit
2245 ? S 0:00 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
3039 ? Ss 0:00 /lib/systemd/systemd --user
3040 ? S 0:00 (sd-pam)
3054 ? SLl 0:01 /usr/bin/gnome-keyring-daemon --daemonize --login
3059 tty2 Ssl+ 0:00 /usr/lib/gdm3/gdm-x-session --run-script env
STAT ve výše uvedeném výstupu znamená kódy stavu procesu. Podrobnou tabulku naleznete v manuálové stránce příkazu ps.
Ale zřídka uvidíte příkaz ps použitý pouze s možností x. Obvykle je doprovázen možností u takto:
ps -ux
S možností u budete mít podrobné informace o každém procesu:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
abhishek 503 0.0 0.4 681580 37516 pts/0 Sl 18:09 0:00 gedit
abhishek 2245 0.0 0.0 11300 1496 ? S 18:37 0:00 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
abhishek 3039 0.0 0.0 77344 3508 ? Ss 10:37 0:00 /lib/systemd/systemd --user
abhishek 3040 0.0 0.0 114632 360 ? S 10:37 0:00 (sd-pam)
abhishek 3054 0.0 0.1 517104 11512 ? SLl 10:37 0:01 /usr/bin/gnome-keyring-daemon --daemonize --login
Jak můžete vidět, nyní získáte uživatelské jméno a spotřebu CPU a paměti každého procesu. RSS ukazuje, kolik paměti má proces aktuálně v RAM, zatímco VSZ je kolik virtuální paměti má proces celkem.
2. Podívejte se na všechny běžící procesy pomocí příkazu ps aux
Pravděpodobně uvidíte ps -aux
nebo ps aux
celou dobu v linuxových návodech a dokumentaci.
S přidanou volbou -a můžete vidět běžící procesy všemi uživateli v systému Linux.
ps -aux
Výstup příkazu je stejný jako ps -ux, ale nyní máte procesy i od jiných uživatelů. Díky volbě -u můžete identifikovat, který proces patří kterému uživateli.
3. Podívejte se na všechny běžící procesy pomocí příkazu ps -ef v Linux
Kromě ps -aux můžete také vypsat všechny běžící procesy pomocí příkazu -e. Běžnou praxí je zkombinovat ji s možností f, abyste získali úplný seznam příkazů používaných ke spouštění procesů.
ps -ef
Všimněte si, že – před e je důležité, jinak to ukáže jiný výsledek. Řekl jsem vám, že ps je zpackaný a komplikovaný příkaz.
Můžete také zkombinovat možnost H, abyste viděli všechny procesy ve vláknovém zobrazení s podřízenými procesy pod jejich rodiči:
ps -efH
4. Zobrazit všechny spuštěné procesy určitého uživatele
Chcete-li získat informace o všech procesech spuštěných určitým uživatelem, můžete použít volbu -U s uživatelským jménem:
ps -U user_name
Například všechny procesy běžící uživatelem root vidím takto:
ps -U root
PID TTY TIME CMD
1 ? 00:00:41 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
8 ? 00:00:00 mm_percpu_wq
9 ? 00:00:03 ksoftirqd/0
10 ? 00:01:22 rcu_sched
5. Zobrazit všechny procesy spuštěné skupinou
Spuštěné procesy můžete také kategorizovat podle skupiny namísto uživatele zadáním názvu skupiny nebo ID skupiny:
ps -G group_name_or_id
Můžete kombinovat s možností f, abyste získali úplný seznam.
6. Získejte všechny výskyty a PID programu
Jedním ze základních použití příkazu ps je získat ID procesu (PID) běžícího programu. Normálně, když chcete zabít špatně se chovající program, vyhledáte všechny výskyty programu, získáte jejich PID a použijete příkaz kill k ukončení procesu.
ps -C program__name
Například, pokud musím najít všechny spuštěné instance správce balíčků apt:
ps -C apt
PID TTY TIME CMD
11425 pts/1 00:00:00 apt
K získání podobného výsledku můžete také použít příkaz grep.
ps aux | grep program_name
7. Získejte informace o procesu o PID
V pořádku! Máte PID, ale nevíte, ke kterému procesu patří. Pomocí příkazu ps můžete najít informace o procesu z jeho PID tímto způsobem:
ps -pN
Můžete použít více než jeden PID tak, že je oddělíte čárkou:
ps -pN1,N2,N3
Co ještě?
Jak jsem řekl dříve, ps je komplikovaný a rozsáhlý příkaz. Toto byly některé z nejběžnějších příkladů příkazů ps, které budete většinu času potřebovat. Pokud chcete více, vždy se můžete podívat na jeho manuálovou stránku.
Pokud máte nějaký další užitečný příklad příkazu ps, který pravidelně používáte, proč se o něj nepodělit s námi ostatními v sekci komentářů?