GNU/Linux >> Znalost Linux >  >> Linux

Monitorování procesů na Linuxu

Úvod

V tomto článku probereme nejběžnější příkazy s příklady, které se používají při monitorování procesů v systémech Linux, jako jsou:

  • ps
  • nahoře
  • htop
  • lsof

1. ps

Jak všichni víme, Linux je multitaskingový a víceuživatelský systém. Umožňuje tedy více procesů současně fungovat, aniž by se navzájem rušily. Proces je jedním z důležitých základních konceptů operačního systému Linux. Proces je spouštěcí instance programu a provádí různé úkoly v rámci operačního systému.

Linux nám poskytuje nástroj s názvem ps pro zobrazení informací souvisejících s procesy v systému, což je zkratka pro „Stav procesu“. Příkaz ps se používá k výpisu aktuálně běžících procesů a jejich PID spolu s některými dalšími informacemi, které závisí na různých možnostech. Přečte informace o procesu z virtuálních souborů v /proc souborový systém. /proc obsahuje virtuální soubory, to je důvod, proč se nazývá virtuální souborový systém.

ps poskytuje mnoho možností pro manipulaci s výstupem podle našich potřeb.

Syntaxe :

ps [options]

Možnosti pro příkaz ps:

1- Jednoduchý výběr procesu:

Zobrazuje procesy pro aktuální shell

Výsledek obsahuje čtyři sloupce informací.
Kde,
PID – jedinečné ID procesu
TTY – typ terminálu, ke kterému je uživatel přihlášen
ČAS – množství CPU v minutách a sekundách, po které proces běžel
CMD – název příkazu, který proces spustil.

Poznámka – Někdy, když spustíme ps zobrazí TIME jako 00:00:00. Není to nic jiného než celková akumulovaná doba využití CPU pro jakýkoli proces a 00:00:00 znamená, že jádro dosud nezadalo žádný čas CPU. Ve výše uvedeném příkladu jsme zjistili, že pro bash nebyl zadán čas CPU. Je to proto, že bash je pouze nadřazený proces pro různé procesy, které ke svému provádění potřebují bash, a bash samotný dosud nevyužívá žádný CPU čas.

2. Zobrazit procesy:

Zobrazení všech běžících procesů pomocí jedné z následujících možností s ps –

# ps -A
# ps -e
3. Zobrazit procesy, které nejsou spojeny s terminálem:

Zobrazit všechny procesy kromě vedoucích relací a procesů, které nejsou spojeny s terminálem.

# ps -a

Poznámka – Možná si říkáte, co je vedoucí relace? Jedinečná relace je přiřazena každé skupině procesů. Vedoucí relace je tedy proces, který spouští další procesy. ID procesu prvního procesu jakékoli relace je podobné jako ID relace.

4. Zobrazit všechny procesy kromě vedoucích relací:
# ps -d

5. Zobrazit všechny procesy kromě těch, které splňují zadané podmínky (neguje výběr):
Příklad – Pokud chcete vidět pouze vedoucího relace a procesy, které nejsou spojeny s terminálem. Poté spusťte

# ps -a -N
or
# ps -a --deselect

6. Zobrazit všechny procesy spojené s tímto terminálem:

# ps -T

7. Zobrazit všechny běžící procesy:

# ps -r

8. Zobrazte všechny procesy, které vlastníte: Procesy, tj. stejné EUID jako ps, což znamená běžec příkazu ps, v tomto případě root

# ps -x

Zpracovat výběr podle seznamu

Zde budeme diskutovat o tom, jak získat seznam konkrétních procesů pomocí příkazu ps. Tyto možnosti přijímají jeden argument ve formě seznamu odděleného mezerami nebo čárkami. Lze je použít vícekrát.
Například: ps -p "1 2" -p 3,4

  1. Vyberte proces podle názvu příkazu. Tím se vyberou procesy, jejichž název spustitelného souboru je uveden v cmdlist. Může existovat možnost, že neznáte ID procesu a s tímto příkazem je vyhledávání snazší.

Syntaxe: ps -C název_příkazu

Příklad :

[root@unixcop ~]# ps -C dhclient
  PID TTY          TIME CMD
19815 ?        00:00:00 dhclient

2. Vyberte podle ID skupiny nebo názvu. ID skupiny identifikuje skupinu uživatele, který vytvořil proces.

Syntax : ps -G group_name
         ps --Group group_name

Example :
[root@unixcop ~]# ps -G root

3. Zobrazit podle ID skupiny :

Syntax : ps -g group_id
              ps -group group_id

Nyní příklad :

# ps -g 1

4. Zobrazit proces podle ID procesu.

-Syntax :
ps p process_id
ps -p process_id
ps --pid process_id

A příklady:

[root@unixcop ~]#  ps p 27223
  PID TTY      STAT   TIME COMMAND
27223 ?        Ss     0:01 sshd: root@pts/2

[root@unixcop ~]#  ps -p 27223
  PID TTY          TIME CMD
27223 ?        00:00:01 sshd

[root@unixcop ~]#  ps --pid 27223
  PID TTY          TIME CMD
27223 ?        00:00:01 sshd

Více procesů můžete zobrazit zadáním více ID procesů oddělených mezerou nebo čárkou –
Pro Příklad:

[root@unixcop ~]#  ps -p 1 904 27223
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:13 /usr/lib/systemd/systemd --switched-root --system --d
  904 tty1     Ssl+   1:02 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/r
27223 ?        Ss     0:01 sshd: root@pts/2

Zde jsme zmínili tři ID procesu – 1, 904 a 27223, která jsou oddělena mezerou.

5. Vyberte podle ID nadřazeného procesu. Pomocí tohoto příkazu můžeme zobrazit všechny procesy vlastněné nadřazeným procesem kromě nadřazeného procesu.

Příklady :

[root@unixcop ~]# ps -p 766
  PID TTY          TIME CMD
  766 ?        00:00:06 NetworkManager

[root@unixcop ~]# ps --ppid 766
  PID TTY          TIME CMD
19815 ?        00:00:00 dhclient

Ve výše uvedeném příkladu ID procesu 766 je přiřazen k NetworkManager a toto je nadřazený proces pro dhclient s ID procesu 19815.

6. Zobrazte všechny procesy patřící k libovolnému ID relace.

Syntax :
ps -s session_id
ps --sid session_id

Example :
[root@unixcop ~]# ps -s 1248
  PID TTY          TIME CMD
 1248 ?        00:00:00 dbus-daemon
 1276 ?        00:00:00 dconf-service
 1302 ?        00:00:00 gvfsd
 1310 ?        00:00:00 gvfsd-fuse
 1369 ?        00:00:00 gvfs-udisks2-vo
 1400 ?        00:00:00 gvfsd-trash
 1418 ?        00:00:00 gvfs-mtp-volume
 1432 ?        00:00:00 gvfs-gphoto2-vo
 1437 ?        00:00:00 gvfs-afc-volume
 1447 ?        00:00:00 wnck-applet
 1453 ?        00:00:00 notification-ar
 1454 ?        00:00:02 clock-applet

7. Vyberte pomocí tty. Tím se vyberou procesy spojené se zmíněným tty :

The Syntax :
ps t tty
ps -t tty
ps --tty tty

Například :

# ps -t pts/0

8. Vyberte podle platného ID uživatele nebo jména.

A Syntaxe je:
ps U uživatelské_jméno/ID

ps -U uživatelské_jméno/ID

Ovládání výstupního formátu

Tyto možnosti se používají k výběru informací zobrazených ps. Existuje několik možností, jak ovládat výstupní formát. Tyto možnosti lze kombinovat s jakýmikoli dalšími možnostmi, jako jsou e, u, p, G, g atd., záleží na naší potřebě.

1. Použijte -f pro zobrazení seznamu v plném formátu.

ps -af

2. Použijte -F pro zobrazení Extra plného formátu.

ps -F

3. Pro zobrazení procesu podle uživatelem definovaného formátu.

#  ps --formate column_name
#  ps -o column_name
#  ps o column_name

Příklad :

ps -aN --format cmd,pid,user,ppid

V tomto příkladu chci vidět příkaz, ID procesu, uživatelské jméno a ID nadřazeného procesu, takže předám argumenty cmd, pid, user a ppid.

4. Zobrazit ve formátu řízení úlohy BSD:

ps -j

5. Zobrazte dlouhý formát BSD :

ps l

6. Přidejte sloupec bezpečnostních dat.

ps -aM

7. Zobrazit příkaz s formátem signálu.

[root@unixcop ~]# ps s 766

8. Zobrazení uživatelsky orientovaného formátu

ps u 1

9. Zobrazte formát virtuální paměti

ps v 1

10. Pokud chcete vidět prostředí libovolného příkazu. Poté použijte volbu **e** –

[root@unixcop ~]# ps ev 766
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
  766 ?        Ssl    0:08     47  2441 545694 10448  1.0 /usr/sbin/NetworkManager --no-daemon LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

11. Zobrazte procesy využívající nejvyšší paměť.

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem

12. vytiskněte procesní strom

[root@unixcop ~]# ps --forest -C sshd
  PID TTY          TIME CMD
  797 ?        00:00:00 sshd
11680 ?        00:00:03  \_ sshd
16361 ?        00:00:02  \_ sshd

13. Vypište všechna vlákna pro konkrétní proces. Použijte buď -T nebo -L možnost zobrazit vlákna procesu.

[root@unixcop ~]# ps -C sshd -L
  PID   LWP TTY          TIME CMD
  797   797 ?        00:00:00 sshd
11680 11680 ?        00:00:03 sshd
16361 16361 ?        00:00:02 sshd

Poznámka – Vysvětlení obsahu různých sloupců naleznete na manuálové stránce.

Odkaz: Manuální stránka

2. nahoře

nahoře příkaz se používá k zobrazení procesů Linuxu. Poskytuje dynamický pohled na běžící systém v reálném čase. Obvykle tento příkaz zobrazuje souhrnné informace o systému a seznam procesů nebo vláken, které jsou aktuálně spravovány jádrem Linuxu.
Jakmile tento příkaz spustíte, otevře se interaktivní příkazový režim, kde horní polovina bude obsahovat statistiky procesů a využití zdrojů. Dolní polovina obsahuje seznam aktuálně běžících procesů. Stisknutím q jednoduše ukončí příkazový režim.

Syntaxe :

top

Zde

  • PID: Zobrazuje jedinečné ID procesu úkolu.
  • PR: Znamená prioritu úkolu.
  • SHR: Představuje množství sdílené paměti využívané úlohou.
  • VIRT: Celková virtuální paměť použitá úlohou.
  • UŽIVATEL: Uživatelské jméno vlastníka úkolu.
  • %CPU: Představuje využití procesoru.
  • TIME+: Čas CPU, stejný jako „TIME“, ale odráží větší podrobnosti v setinkách sekundy.
  • SHR: Představuje velikost sdílené paměti (kb), kterou používá úkol.
  • NI: Představuje pěknou hodnotu úkolu. Záporná hodnota Nice znamená vyšší prioritu a kladná hodnota Nice znamená nižší prioritu.
  • %MEM: Zobrazuje využití paměti úkolu.

Příklady:

1) Ukončete horní příkaz po určitém opakování: Nejvyšší výstup se obnovuje, dokud nestisknete „q“. S níže uvedeným příkazem se příkaz top automaticky ukončí po 20 opakováních.

top -n 10

2) Zobrazit konkrétní uživatelský proces

top -u unixcop

zde uživatel nazval unixcop

3) Zvýrazněte Spuštěný proces nahoře: Stiskněte ‘z‘ volba v příkazu running top zobrazí běžící proces barevně, což vám může pomoci snadno identifikovat běžící proces

4) Zobrazuje absolutní cestu procesů:

Stiskněte ‚c‘ možnost v příkazu running top, zobrazí absolutní cestu spuštěného pro

5) Ukončení běžícího procesu: Po nalezení PID procesu můžete proces zabít stisknutím ‘k‘ možnost při spuštění příkazu top bez opuštění horního okna, jak je znázorněno níže.

6) Seřadit podle využití CPU: Stiskněte (Shift+P) k třídění procesů podle využití CPU.

7) Zobrazí hlavní syntaxi příkazu:

top -h 

8) Dávkový režim: Odesílejte výstup shora do souboru nebo jiných programů.

top -b

9) Zabezpečený režim: Použijte horní v zabezpečeném režimu.

top -s

10) Příkazový řádek: Níže uvedený příkaz začíná nahoře posledním uzavřeným stavem.

Top -c

11) Doba zpoždění: Udává dobu zpoždění mezi aktualizacemi obrazovky.

top -d seconds.tenths

3. htop

htop command v systému Linux je nástroj příkazového řádku, který umožňuje uživateli interaktivně sledovat životně důležité zdroje systému nebo procesy serveru v reálném čase. htop je novější program ve srovnání stop command a nabízí mnoho vylepšení oproti top command. htop podporuje ovládání myši, používá barvy ve svém výstupu a poskytuje vizuální informace o využití procesoru, paměti a swapu. htop také tiskne úplné příkazové řádky pro procesy a umožňuje rolování procesů a příkazových řádků jak svisle, tak vodorovně.

Syntaxe:

htop [-dChusv]

Příklad:

Možnosti:

  • -d –zpoždění : Používá se k zobrazení zpoždění mezi aktualizacemi v desetinách sekund.
  • -C –bez barvy –bez barvy :Spusťte htop v monochromatickém režimu.
  • -h –help : Používá se k zobrazení zprávy nápovědy a ukončení.
  • -u –user=USERNAME : Používá se k zobrazení pouze procesů daného uživatele.
htop -u qadry
  • -p –pid=PID, PID…: Používá se k zobrazení pouze daných PID.
  • -s –sort-key COLUMN : Seřaďte podle tohoto sloupce (pro seznam sloupců použijte nápovědu –sort-key).
  • -V –verze : Vytiskněte informace o verzi a ukončete.

Interaktivní příkazy:

  • Šipky, Page Up, Page Down, Home, End :Procházejte seznam procesů.
  • Vesmír :Označení nebo zrušení označení procesu.
  • U – Zrušte označení všech procesů (odeberte všechny značky přidané pomocí mezerníku).
  • s – Sledování systémových volání procesů.
  • F1 – Nápověda
  • F2 – nastavení
  • F3 – hledat
  • F4 – filtrování:zadejte část příkazového řádku procesu a zobrazí se pouze procesy, jejichž názvy se shodují.
  • F5 – Stromový pohled.
  • F6 – Třídění.
  • F7 – Zvyšte prioritu vybraného procesu. To může provést pouze superuživatel.
  • F8 – Snižte prioritu vybraného procesu.
  • F9 – Zabít proces.
  • F10 – Konec.

4. lsof

Linux/Unix považují vše za soubor a složku pro správu. Tedy „Soubory nebo soubor “ je v Linuxu/Unixu velmi důležitý. Při práci v systému Linux/Unix může být používáno několik souborů a složek, některé z nich budou viditelné a některé ne.
lsof příkaz znamená Seznam otevřených souborů . Tento příkaz poskytuje seznam souborů, které jsou otevřeny. V zásadě poskytuje informace pro zjištění souborů, které se otevírají kterým procesem. Jedním tahem vypíše všechny otevřené soubory ve výstupní konzoli. Neuvádí pouze běžné běžné soubory, ale může vypsat adresář, speciální blokový soubor, sdílenou knihovnu, znakový speciální soubor, běžný kanál, pojmenovaný kanál, internetový soket, soket domény UNIX a mnoho dalších. lze jej kombinovat s příkazem grep, lze jej použít k pokročilému vyhledávání a výpisu.

Syntaxe:

lsof [option][user name]

Možnosti s příklady:

  • Seznam všech otevřených souborů: Tento příkaz vypíše všechny soubory, které jsou otevřeny jakýmkoli procesem v systému.
lsof

Zde vidíte podrobnosti o souborech, které jsou otevřeny. ID procesu, uživatel spojený s procesem, FD (deskriptor souboru), velikost souboru dohromady poskytuje podrobné informace o souboru otevřeném příkazem, ID procesu, uživatele, jeho velikost atd.

  • FD představuje jako popisovač souboru.
  • cwd :Aktuální pracovní adresář.
  • txt :Textový soubor.
  • paměť :Paměťový soubor.
  • mmap :Zařízení s mapou paměti.
  • Seznam všech souborů otevřených uživatelem: Existuje několik uživatelů systému a každý uživatel má jiné požadavky a podle toho používá soubory a zařízení. Tento příkaz je užitečný pro nalezení seznamu souborů, které jsou otevřeny konkrétním uživatelem.

Syntaxe:

lsof -u username

Příklad :

lsof -u qadry

Na obrázku výše s příkazem lsof -u qadry vypíše všechny soubory otevřené uživatelem. Spolu s tím zde můžeme vidět typ souboru a jsou to:

  • DIR: Adresář
  • REG: Běžný soubor
  • CHR: Speciální soubor znaků
  • Uveďte seznam všech souborů, které otevřeli všichni kromě konkrétního uživatele: Pomocí tohoto příkazu můžete vypsat všechny soubory otevřené celým procesem a všemi uživateli. Ale když chceme najít seznam souborů, které jsou otevřeny všemi uživateli kromě konkrétního uživatele, můžeme použít:

Syntaxe:

lsof -u ^root

Na daném obrázku můžeme pozorovat, že nejsou žádné soubory, které by otevřel uživatel root.

  • Seznam všech otevřených souborů podle konkrétního procesu: Tento příkaz může vypsat všechny soubory otevřené konkrétním procesem. -c následované názvy procesů můžete zjistit všechny soubory, které jsou otevřeny daným procesem, který je pojmenován v příkazu.
Syntaxe:
lsof -c crond

Zde můžete pozorovat, že soubory a jejich popis byly otevřeny procesem crond.

  • Seznam všech otevřených souborů, které jsou otevřeny konkrétním procesem: Každý soubor je spojen s nějakým ID procesu. Může existovat mnoho souborů, které jsou otevřeny konkrétním procesem. Pomocí lsof -p ID procesu lze zkontrolovat soubory otevřené konkrétním procesem.

Syntaxe:

lsof -p process ID

Příklad :

lsof -p 2781
  • Soubory otevřené všemi ostatními PID: Jak je uvedeno výše, příkaz obrázek uvádí seznam souborů otevřených konkrétním ID procesu. Stejným způsobem můžete použít níže uvedenou možnost příkazu k nalezení seznamu souborů, které nejsou otevřeny konkrétním ID procesu.
Syntaxe:
lsof -p ^process ID
  • Uveďte ID nadřazených procesů: V systému běží velké množství procesů a mají otevřené soubory pro jeho použití. Proces může mít mnoho podřízených procesů a tento proces lze také označit jako nadřazený proces. Ke zjištění seznamu souborů otevřených nadřazeným procesem se používá příkaz lsof s volbou -R .

Syntaxe:

lsof -R
  • Soubory otevřené adresářem: Vypisuje soubory, které jsou otevřeny konkrétním adresářem. V systému jsou soubory i adresář. Takže v adresáři může být otevřeno několik souborů stejně jako běžný soubor.

Syntaxe:

lsof -D directory path
  • Soubory otevřené síťovými připojeními: Náš počítač/systém lze propojit prostřednictvím různých sítí, což pomáhá k různým účelům. Protože víme, že v Linuxu je vše soubor, můžeme dokonce kontrolovat soubory, které jsou otevřeny některými síťovými připojeními v systému.

Syntaxe:

lsof -i

Příklad:

lsof -i tcp

Zde na obrázku vidíme soubory otevřené sítí TCP. Stejným způsobem můžeme zkontrolovat UDP atd.

Poznámka: Chcete-li se dozvědět více podrobností o příkazu lsof, můžete se podívat na manuálovou stránku takto:

 man lsof

Linux
  1. 30 Cvičení procesů Linuxu pro systémové správce

  2. Linux – Init Process:Předchůdce všech procesů?

  3. UNIX / Linux:3 způsoby odesílání signálu do procesů

  1. Linuxový příkaz ps

  2. UNIX / Linux Procesy:C fork() Funkce

  3. Správa procesů v Ubuntu Linux

  1. Tipy na začátek:Sledování zatížení procesoru v systému Linux

  2. Jak zabít proces v Linuxu? Příkazy k ukončení

  3. Linux:Najděte a zabijte zombie procesy