GNU/Linux >> Znalost Linux >  >> Linux

UNIX / Linux:7 praktických příkladů příkazů PS pro monitorování procesů

Proces je spuštěná instance programu. Linux je multitaskingový operační systém, což znamená, že může být aktivních více než jeden proces najednou. Pomocí příkazu ps zjistěte, jaké procesy běží ve vašem systému.

Tento článek vysvětluje 7 praktických použití příkazu ps a jeho možností.

Pro monitorování a řízení procesů poskytuje Linux mnoho příkazů, jako jsou příkazy ps, kill, killall, nice, renice a top.

1. Vypsat aktuálně spuštěné procesy (ps -ef, ps -aux)

Je to běžně používaný příklad s příkazem ps pro seznam všech procesů, které aktuálně běží na počítači. Následující příklad ukazuje možnosti příkazu ps pro získání všech procesů.

$ ps -ef
root     26551     5  0 Feb10 ?        00:03:41 [pdflush]
root     26570     5  0 Feb10 ?        00:00:20 [pdflush]
root     30344  3382  0 Feb21 ?        00:00:11 sshd: root@pts/14
root     30365 30344  0 Feb21 pts/14   00:00:02 -bash
root     30393  3382  0 Feb21 ?        00:00:10 sshd: root@pts/15

Kde:

  • -e pro zobrazení všech procesů.
  • -f pro zobrazení seznamu v plném formátu.

V případě strojů BSD můžete použít „ps -aux“ a poskytne podrobnosti o celém procesu, jak je uvedeno výše.

$ ps -aux

2. Vypište proces na základě UID a příkazů (ps -u, ps -C)

Pomocí volby -u zobrazíte proces, který patří ke konkrétnímu uživatelskému jménu. Pokud máte více uživatelských jmen, oddělte je čárkou. Níže uvedený příklad zobrazuje všechny procesy, které vlastní uživatel wwwrun nebo postfix.

$ ps -f -u wwwrun,postfix
UID        PID  PPID  C STIME TTY          TIME CMD
postfix   7457  7435  0 Mar09 ?        00:00:00 qmgr -l -t fifo -u
wwwrun    7495  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7496  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7497  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7498  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7499  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   10078  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   10082  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
postfix  15677  7435  0 22:23 ?        00:00:00 pickup -l -t fifo -u

Často se ps používá s grep jako „ps -aux | grep příkaz“ pro získání seznamu procesů s daným příkazem.

Ale samotný příkaz ps má možnost dosáhnout stejného. Následující příklad ukazuje, že všechny procesy, které mají ve svém příkazu tatad.pl.

$ ps -f -C tatad.pl
UID        PID  PPID  C STIME TTY          TIME CMD
root      9576     1  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9577  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9579  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9580  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9581  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9582  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root     12133  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl

Poznámka: Můžeme vytvořit aliasy pro příkaz ps pro výpis procesů na základě příkazů, uživatelů nebo skupin.

3. Vyjmenujte procesy založené na PID nebo PPID (ps -p, ps –ppid)

Každému procesu bude přiřazeno jedinečné ID procesu (PID).

Když spustíte nějakou aplikaci, může se rozdělit počet procesů a každý dílčí proces bude mít svůj vlastní PID. Každý proces tedy bude mít své vlastní ID procesu a ID nadřazeného procesu.

Pro všechny procesy, které proces rozvětvuje, bude mít stejný PPID (identifikátor nadřazeného procesu). Následující metoda se používá k získání seznamu procesů s konkrétním PPID.

$ ps -f --ppid 9576
UID        PID  PPID  C STIME TTY          TIME CMD
root      9577  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9579  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9580  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9581  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9582  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root     12133  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl

Následující příklad obsahuje seznam procesů, které zadaly PID.

$ ps -f  -p 25009,7258,2426
UID        PID  PPID  C STIME TTY          TIME CMD
root      2426     4  0 Mar09 ?        00:00:00 [reiserfs/0]
root      7258     1  0 Mar09 ?        00:00:00 /usr/sbin/nscd
postfix  25009  7435  0 00:02 ?        00:00:00 pickup -l -t fifo -u

4. Seznam procesů v hierarchii (ps –forest)

Níže uvedený příklad zobrazuje ID procesu a příkazy v hierarchii. –forest je argument příkazu ps, který zobrazuje ASCII umění stromu procesů. Z tohoto stromu můžeme identifikovat, který je nadřazený proces, a podřízený proces jej rozvětvený zpracovává rekurzivním způsobem.

$ ps -e -o pid,args --forest
  468  \_ sshd: root@pts/7
  514  |   \_ -bash
17484  \_ sshd: root@pts/11
17513  |   \_ -bash
24004  |       \_ vi ./790310__11117/journal
15513  \_ sshd: root@pts/1
15522  |   \_ -bash
 4280  \_ sshd: root@pts/5
 4302  |   \_ -bash

Poznámka: Můžete také použít strom a příkaz pstree k zobrazení procesu v pěkné stromové struktuře.

5. Vypsat uplynulý čas stěny pro procesy (ps -o pid,etime=)

Pokud chcete získat uplynulý čas pro procesy, které právě běží, příkaz ps poskytuje etime, který poskytuje uplynulý čas od spuštění procesu, ve tvaru [[dd-]hh:]mm:ss.

Níže uvedený příkaz zobrazuje uplynulý čas pro ID procesu 1 (init) a ID procesu 29675.

Například „10-22:13:29“ ve výstupu představuje proces init běžící po dobu 10 dnů, 22 hodin, 13 minut a 29 sekund. Protože proces init začíná během spouštění systému, bude tento čas stejný jako výstup příkazu ‚uptime‘.

# ps -p 1,29675 -o pid,etime=
  PID
    1 10-22:13:29
29675  1-02:58:46

6. Vypsat všechna vlákna pro konkrétní proces (ps -L)

Můžete získat seznam vláken pro procesy. Když se proces zasekne, možná budeme muset identifikovat seznam vláken spuštěných pro konkrétní proces, jak je uvedeno níže.

 $ ps -C java -L -o pid,tid,pcpu,state,nlwp,args
  PID   TID %CPU S NLWP COMMAND
16992 16992  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16993  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16994  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16995  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16996  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16997  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16998  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16999  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17000  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17001  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17002  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17003  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17024  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 15753  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 15754  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006

Volba -L se používá k zobrazení seznamu vláken pro proces, který má daný příkaz. A také zobrazuje nlwp, což představuje počet lehkých procesů. Ve výše uvedeném příkladu je spuštěno celkem 15 vláken Java.

7. Hledání úniku paměti (ps –sort pmem)

Únik paměti technicky znamená neustále se zvyšující využití paměti aplikací.

U běžných desktopových aplikací to může zůstat nepovšimnuto, protože proces obvykle uvolní veškerou použitou paměť, když aplikaci zavřete.

V modelu klient/server je však únik paměti vážným problémem, protože se očekává, že aplikace budou dostupné 24×7. Aplikace nesmí pokračovat ve zvyšování využití paměti donekonečna, protože to může způsobit vážné problémy. Ke sledování takových úniků paměti můžeme použít následující příkazy.

$ ps aux --sort pmem

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  1520  508 ?        S     2005   1:27 init
inst  1309  0.0  0.4 344308 33048 ?      S     2005   1:55 agnt (idle)
inst  2919  0.0  0.4 345580 37368 ?      S     2005  20:02 agnt (idle)
inst 24594  0.0  0.4 345068 36960 ?      S     2005  15:45 agnt (idle)
root 27645  0.0 14.4 1231288 1183976 ?   S     2005   3:01 /TaskServer/bin/./wrapper-linux-x86-32

Ve výše uvedeném příkazu ps volba –sort vypíše nejvyšší %MEM dole. Stačí si poznamenat PID pro nejvyšší využití % MEM. Poté pomocí příkazu ps zobrazte všechny podrobnosti o tomto ID procesu a sledujte změnu v průběhu času. Museli jste ručně opakovat ir nebo jej vložit jako cron do souboru.

$ ps ev --pid=27645
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
27645 ? S 3:01 0 25 1231262 1183976 14.4 /TaskServer/bin/./wrapper-linux-x86-32

$ ps ev --pid=27645
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
27645 ? S 3:01 0 25 1231262 1183976 14.4 /TaskServer/bin/./wrapper-linux-x86-32

Poznámka: Pokud se ve výše uvedeném výstupu časem zvýší RSS (velikost rezidentní sady v kB) (stejně jako %MEM), může to znamenat únik paměti v aplikaci.

Předchozí články ze série sledování a ladění výkonu Linuxu:

  • 10 užitečných příkladů Sar (Sysstat) pro monitorování výkonu UNIX / Linux
  • Úvod do monitorování a ladění výkonu systému Linux
  • 15 praktických příkladů hlavních příkazů Linuxu

Linux
  1. 8 Praktické příklady příkazu Linux Xargs pro začátečníky

  2. cp Command v Linuxu:7 praktických příkladů

  3. UNIX / Linux:10 příkladů příkazů Netstat

  1. 12 Příklady IP příkazů pro uživatele Linuxu

  2. Linux Shutdown Command:5 praktických příkladů

  3. 5 Praktické příklady příkazu dd v Linuxu

  1. Linux top Command Tutorial pro začátečníky (8 příkladů)

  2. 16 Praktické příklady příkazu Linux LS pro začátečníky

  3. 30 hlavních příkladů příkazů pro monitorování v systému Linux