GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara kerja perintah ps?

Di Linux, ps perintah bekerja dengan membaca file di sistem file proc. Direktori /proc/PID berisi berbagai file yang memberikan informasi tentang proses PID . Konten dari file-file ini dihasilkan dengan cepat oleh kernel ketika suatu proses membacanya.

Anda dapat menemukan dokumentasi tentang entri di /proc di halaman manual proc(5) dan di dokumentasi kernel.

Anda bisa mengetahuinya sendiri dengan mengamati apa yang ada di ps perintah lakukan dengan strace , perintah yang mencantumkan panggilan sistem yang dilakukan oleh suatu proses.

% 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
…

Anda mungkin ingin melihat di /proc map:
Setiap proses yang berjalan di mesin Anda memiliki subfolder di sini, dengan banyak file (IMO yang paling berguna adalah comm , yang memberi nama proses.)


Ia bekerja dengan menggunakan pustaka libprocps.so.

Format utamanya adalah :

(A) mulai (memanggil openproc())

(B) membaca info proses (memanggil readproc() untuk masing-masing)

(C) berhenti ( memanggil closeproc())

Menggunakan libprocps.so memberikan keuntungan (misalnya, membebaskan Anda dari pengkodean banyak fungsi "parsing") dan kerugian (mungkin Anda menginginkan lebih sedikit info daripada yang dikumpulkan oleh panggilan readproc()).

Program yang menggunakan libprocps.so memiliki format dasar ini.

    #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 akan menyimpan semua info untuk suatu proses (seperti utime, stime, prioritas, bagus, ppid, dll) sudah dalam format numerik. Jika Anda mengunduh sumbernya, proc_t struct didefinisikan menjadi readproc.h

OPSI yang dapat Anda gunakan dalam panggilan openproc() adalah bitwise-atau flag, sehingga Anda dapat menggunakan satu atau lebih dari itu, seperti :

    PROCTAB *proctab = openproc(PROC_FILLMEM | PROC_FILLCOM) ;

Mereka juga didefinisikan ke dalam readproc.h (telusuri '#define PROC_FILLMEM').


Linux
  1. Bagaimana cara menggunakan perintah nama dasar?

  2. Bagaimana Cara Kerja Sticky Bit?

  3. Bagaimana Cara Kerja Perintah Tee??

  1. Cara menggunakan perintah grep Linux

  2. Bagaimana cara kerja perintah 'ls' di Linux/Unix?

  3. Bagaimana cara kerja antarmuka loopback

  1. Cara menggunakan perintah history di Linux

  2. Tujuan .bashrc Dan Bagaimana Cara Kerjanya?

  3. Dalam Skrip Bash Bagaimana Perintah Lanjutkan Bekerja Dengan Loop Tertanam?