GNU/Linux >> Znalost Linux >  >> Linux

Jak funguje příkaz ps?

V systému Linux ps příkaz funguje načtením souborů v souborovém systému proc. Adresář /proc/PID obsahuje různé soubory, které poskytují informace o procesu PID . Obsah těchto souborů je generován za běhu jádrem, když je proces čte.

Dokumentaci k položkám naleznete v /proc v manuálové stránce proc(5) a v dokumentaci jádra.

Můžete to zjistit sami, když budete sledovat ps příkaz dělá s strace , příkaz, který uvádí seznam systémových volání provedených procesem.

% strace -e open ps
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libprocps.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/stat", O_RDONLY)       = 3
open("/proc/uptime", O_RDONLY)          = 3
open("/proc/sys/kernel/pid_max", O_RDONLY) = 4
open("/proc/meminfo", O_RDONLY)         = 4
open("/proc/1/stat", O_RDONLY)          = 6
open("/proc/1/status", O_RDONLY)        = 6
open("/proc/2/stat", O_RDONLY)          = 6
open("/proc/2/status", O_RDONLY)        = 6
open("/proc/3/stat", O_RDONLY)          = 6
open("/proc/3/status", O_RDONLY)        = 6
…

% strace -e open ps
…
open("/proc/1/stat", O_RDONLY)          = 6
open("/proc/1/status", O_RDONLY)        = 6
open("/proc/1/cmdline", O_RDONLY)       = 6
…

Možná se budete chtít podívat do /proc složka:
Každý proces běžící na vašem počítači má zde podsložku se spoustou souborů (nejužitečnější IMO je comm , který udává název procesu.)


Funguje pomocí knihovny libprocps.so.

Hlavní formát je :

(A) start (volání openproc())

(B) čtení informací o procesu (volání readproc() pro každý z nich)

(C) stop (volání closeproc())

Použití libprocps.so přináší výhody (například vás osvobodí od kódování spousty „analyzačních“ funkcí) a nevýhody (možná budete chtít méně informací, než shromážděné voláním readproc()).

Program používající libprocps.so má tento základní formát.

    #include <proc/readproc.h>
         :
    int main()
   {
         :
       PROCTAB *proctab = openproc(<OPTIONS>) ;
         :
         :
       proc_t procinfo ;
       memset(&procinfo, 0, sizeof(procinfo)) ;
       while(readproc(proctab, &procinfo) != nullptr)
       {
          <do something with procinfo data>
       }
         :
         :
       closeproc(proctab) ;
       return 0 ;
    }

procinfo bude obsahovat všechny informace o procesu (jako utime, stime, priorita, nice, ppid atd.) již v číselném formátu. Pokud jste si stáhli zdroje, proc_t struct je definována v readproc.h

MOŽNOSTI můžete použít ve volání openproc() jsou bitové příznaky nebo příznaky, takže můžete použít jeden nebo více z nich, jako:

    PROCTAB *proctab = openproc(PROC_FILLMEM | PROC_FILLCOM) ;

Jsou také definovány v readproc.h (hledejte '#define PROC_FILLMEM').


Linux
  1. Jak používat příkaz basename?

  2. Jak Sticky Bit funguje?

  3. Ssh – Jak funguje Tcp-keepalive v Ssh?

  1. Jak funguje příkaz Exit na Unixovém terminálu?

  2. Jak funguje Tee Command?

  3. Jak funguje příkaz 'ls' v Linuxu/Unixu?

  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jak příkaz stat vypočítá bloky souboru?