ps --help all

ps (process status ), Unix/Linux işletim sistemlerinde, sistemde çalışan processler hakkında bilgi almamıza yardımcı olan bir komuttur. Bu bilgi ise virtual files yani sanal dosyalardan gelir. Bu virtual dosyalar ise sistem tarafından /proc dizinine bağlanmıştır. En azından Virtual File System ve Processler hakkında temel bilginizin olması gerektiğini düşünüyorum. Blogta bir yerde, temel olarak ikiye ayrılan processlerden biri olan Background Processlerin özel bir türü olan Daemons'lara değinmiştim. İşte ben oraya link veremeyecek kadar üşengeç aynı zamanda blog için bir arama motoru geliştirmeyecek kadar da sorumsuzum. Belki ilerde bir arama motoru ile rahat bir şekilde ulaşabilirsiniz. Neyse bunları es geçelim ve ps komutu için bazı faydalı kullanımları hızlıca not edelim.

Başlıktaki komutu terminale yazdığımızda kullanılabilecek tüm optionlar karşımıza çıkmaktadır. Dilerseniz args-option-flag tartışması başlatabiliriz; tartışma sonuçlanana kadar bazen option bazen de flag diyeceğim. Başlığı terminalde çalıştırırsak eğer:

$ ps --help all

Usage:
 ps [options]

Basic options:
 -A, -e               all processes
 -a                   all with tty, except session leaders
  a                   all with tty, including other users
 -d                   all except session leaders
 -N, --deselect       negate selection
  r                   only running processes
  T                   all processes on this terminal
  x                   processes without controlling ttys
...
...
...

gibi gibi sonuç alırız. Yalnızca ps komutunu herhangi bir flag almadan çalıştırırsak mevcut shell için çalışan processleri görüntüleriz. Aslında bu kısmı biraz uzatarak, virtual dosyaların bağlandığı /proc dizini ile ilgili bir şey göstermek istiyorum. Bu sayede şimdiye kadar kullandığım bazı kavramların küçük bir açıklamasını yapmış olurum. Tek bir snippet ile göstereceğim daha sonrasında ise açıklayacağım.

$ cd /proc/

$ ps 
    PID TTY          TIME CMD
   8693 pts/1    00:00:00 bash
  10044 pts/1    00:00:00 ps

$ ls | grep 8693 
8693

$ exit 

#Yeni terminal

$ ls /proc/ | grep 8693
<<Çıktı YOK!>>

$ ps
    PID TTY          TIME CMD
  10051 pts/0    00:00:00 bash
  10074 pts/0    00:00:00 ps

$ ls /proc/ | grep 10051
10051

Her bir process hakkında bilgi, sanal dosyaların bağlandığı /proc/ dizininden alınmaktadır. İlk shell için yani PID'si 8693 olan process, /proc dizininde mevcutken, daha sonra mevcut shelli kapattığımızda processte yok oluyor ve tabi /proc dizininden de kalkıyor. Öyle bir anlatayım dedim. Artık kısa kısa notlarla ilerleyeceğim.

Sistemde çalışan tüm processler (Standart Format) için:

$ ps -A
#veya
$ ps -e
    PID TTY          TIME CMD
      1 ?        00:00:01 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      5 ?        00:00:00 netns
      7 ?        00:00:00 kworker/0:0H-events_highpri
      9 ?        00:00:00 mm_percpu_wq
     10 ?        00:00:00 rcu_tasks_rude_
     11 ?        00:00:00 rcu_tasks_trace
     12 ?        00:00:00 ksoftirqd/0
     ...
     ...

Sistemde çalışan tüm processler (BSD Fomat) için:

$ ps aux 
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1 166996 12008 ?        Ss   04:55   0:01 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    04:55   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   04:55   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   04:55   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   04:55   0:00 [netns]
root           7  0.0  0.0      0     0 ?        I<   04:55   0:00 [kworker/0:0H-events_highpri]
root           9  0.0  0.0      0     0 ?        I<   04:55   0:00 [mm_percpu_wq]
root          10  0.0  0.0      0     0 ?        S    04:55   0:00 [rcu_tasks_rude_]
...
...
...

Kodu çalıştıran kullanıcının altında çalışan tüm processleri listelemek için:

$ ps -x 
    PID TTY      STAT   TIME COMMAND
   1893 ?        Ss     0:00 /lib/systemd/systemd --user
   1894 ?        S      0:00 (sd-pam)
   1901 ?        S<sl   0:00 /usr/bin/pipewire
   1902 ?        Ssl    0:00 /usr/bin/pipewire-media-session
   1903 ?        S<sl   7:39 /usr/bin/pulseaudio --daemonize=no --log-target=journal
   1913 ?        Ss     0:01 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
   1915 ?        Sl     0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
   1925 ?        Ssl    0:00 /usr/libexec/xdg-document-portal
   1926 ?        Ssl    0:00 /usr/libexec/gvfsd
   ...
   ...

$ sudo -i
root@burak:~$ ps -x 
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     0:01 /sbin/init splash
      2 ?        S      0:00 [kthreadd]
      3 ?        I<     0:00 [rcu_gp]
      4 ?        I<     0:00 [rcu_par_gp]
      5 ?        I<     0:00 [netns]
      7 ?        I<     0:00 [kworker/0:0H-events_highpri]
      9 ?        I<     0:00 [mm_percpu_wq]
     10 ?        S      0:00 [rcu_tasks_rude_]
     ...
     ...

User'a göre processleri listelemek istersek:

$ ps -u burak
PID TTY          TIME CMD
   2419 ?        00:00:00 systemd
   2420 ?        00:00:00 (sd-pam)
   2428 ?        00:00:00 pipewire
   2429 ?        00:00:00 pipewire-media-
   2430 ?        00:00:11 pulseaudio
   2441 ?        00:00:00 gnome-keyring-d
   2450 ?        00:00:00 dbus-daemon
   ...
   ...
   ...

# veya 

$ ps -fu burak
UID          PID    PPID  C STIME TTY          TIME CMD
burak       2419       1  0 01:22 ?        00:00:00 /lib/systemd/systemd --user
burak       2420    2419  0 01:22 ?        00:00:00 (sd-pam)
burak       2428    2419  0 01:22 ?        00:00:00 /usr/bin/pipewire
burak       2429    2419  0 01:22 ?        00:00:00 /usr/bin/pipewire-media-sess
burak       2430    2419  4 01:22 ?        00:00:13 /usr/bin/pulseaudio --daemon
burak       2441       1  0 01:22 ?        00:00:00 /usr/bin/gnome-keyring-daemo
burak       2450    2419  0 01:22 ?        00:00:00 /usr/bin/dbus-daemon --sessi
...
...
...

Belirli bir processin threadini filtrelemek için:

$ ps -e | grep firefox
   3424 ?        00:04:22 firefox

$ ps -L 3424
    PID     LWP TTY      STAT   TIME COMMAND
   3424    3424 ?        Sl     0:59 /snap/firefox/1810/usr/lib/firefox/firefox
   3424    3618 ?        Sl     0:07 /snap/firefox/1810/usr/lib/firefox/firefox
   3424    3619 ?        Sl     0:00 /snap/firefox/1810/usr/lib/firefox/firefox
   3424    3620 ?        Sl     0:00 /snap/firefox/1810/usr/lib/firefox/firefox
   3424    3621 ?        Sl     0:02 /snap/firefox/1810/usr/lib/firefox/firefox
   ...
   ...
   ...

Belirli bir grupla ilgili processleri listelemek için:

$ ps -fG www-data
UID          PID    PPID  C STIME TTY          TIME CMD
www-data     965     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     966     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     967     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     968     964  0 01:13 ?        00:00:00 nginx: worker process

#VEYA

$ ps -fG 33
UID          PID    PPID  C STIME TTY          TIME CMD
www-data     965     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     966     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     967     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     968     964  0 01:13 ?        00:00:00 nginx: worker process

PPID veya PID'sine göre process listlemek için:

$ ps -f --ppid 964
UID          PID    PPID  C STIME TTY          TIME CMD
www-data     965     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     966     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     967     964  0 01:13 ?        00:00:00 nginx: worker process
www-data     968     964  0 01:13 ?        00:00:00 nginx: worker process

$ ps -fp 965
UID          PID    PPID  C STIME TTY          TIME CMD
www-data     965     964  0 01:13 ?        00:00:00 nginx: worker process

Bir processin PID'sini öğrenmek için:

$ ps -C nginx
    PID TTY          TIME CMD
    964 ?        00:00:00 nginx
    965 ?        00:00:00 nginx
    966 ?        00:00:00 nginx
    967 ?        00:00:00 nginx
    968 ?        00:00:00 nginx

Tree diagram ile process listelemek için --forest veya f kullanın:

$ ps -f f -C nginx
UID          PID    PPID  C STIME TTY      STAT   TIME CMD
root         964       1  0 01:13 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data     965     964  0 01:13 ?        S      0:00  \_ nginx: worker process
www-data     966     964  0 01:13 ?        S      0:00  \_ nginx: worker process
www-data     967     964  0 01:13 ?        S      0:00  \_ nginx: worker process
www-data     968     964  0 01:13 ?        S      0:00  \_ nginx: worker process

Son olarak istediğimiz formatta çıktı almak istiyorsak -o ile bunu yapabiliriz. Kullanılabilir tüm format türleri için:

$ ps L
%cpu         %CPU    
%mem         %MEM    
_left        LLLLLLLL
_left2       L2L2L2L2
_right       RRRRRRRR
_right2      R2R2R2R2
_unlimited   U       
_unlimited2  U2      
alarm        ALARM   
args         COMMAND 
atime        TIME    
blocked      BLOCKED 
bsdstart     START   
bsdtime      TIME    
c            C       
caught       CAUGHT  
cgname       CGNAME  
cgroup       CGROUP  
class        CLS     
cls          CLS     
cmd          CMD     
comm         COMMAND 
command      COMMAND 
context      CONTEXT 
cp           CP      
cpuid        CPUID   
cputime      TIME    
cputimes     TIME    
drs          DRS     
dsiz         DSIZ    
egid         EGID    
egroup       EGROUP  
eip          EIP     
esp          ESP     
etime        ELAPSED 
etimes       ELAPSED 
euid         EUID    
euser        EUSER   
exe          EXE     
f            F       
fgid         FGID    
fgroup       FGROUP  
flag         F       
flags        F       
fname        COMMAND 
fsgid        FSGID   
fsgroup      FSGROUP 
fsuid        FSUID   
fsuser       FSUSER  
fuid         FUID    
fuser        FUSER   
gid          GID     
group        GROUP   
ignored      IGNORED 
intpri       PRI     
ipcns        IPCNS   
label        LABEL   
lastcpu      C       
lim          LIM     
longtname    TTY     
lsession     SESSION 
lstart       STARTED 
luid         LUID    
lwp          LWP     
lxc          LXC     
m_drs        DRS     
m_size       SIZE    
m_trs        TRS     
machine      MACHINE 
maj_flt      MAJFL   
majflt       MAJFLT  
min_flt      MINFL   
minflt       MINFLT  
mntns        MNTNS   
netns        NETNS   
ni           NI      
nice         NI      
nlwp         NLWP    
numa         NUMA    
nwchan       WCHAN   
opri         PRI     
ouid         OWNER   
pagein       PAGEIN  
pcpu         %CPU    
pending      PENDING 
pgid         PGID    
pgrp         PGRP    
pid          PID     
pidns        PIDNS   
pmem         %MEM    
policy       POL     
ppid         PPID    
pri          PRI     
pri_api      API     
pri_bar      BAR     
pri_baz      BAZ     
pri_foo      FOO     
priority     PRI     
psr          PSR     
rgid         RGID    
rgroup       RGROUP  
rss          RSS     
rssize       RSS     
rsz          RSZ     
rtprio       RTPRIO  
ruid         RUID    
ruser        RUSER   
s            S       
sched        SCH     
seat         SEAT    
sess         SESS    
session      SESS    
sgi_p        P       
sgi_rss      RSS     
sgid         SGID    
sgroup       SGROUP  
sid          SID     
sig          PENDING 
sig_block    BLOCKED 
sig_catch    CATCHED 
sig_ignore   IGNORED 
sig_pend     SIGNAL  
sigcatch     CAUGHT  
sigignore    IGNORED 
sigmask      BLOCKED 
size         SIZE    
slice        SLICE   
spid         SPID    
stackp       STACKP  
start        STARTED 
start_stack  STACKP  
start_time   START   
stat         STAT    
state        S       
stime        STIME   
suid         SUID    
supgid       SUPGID  
supgrp       SUPGRP  
suser        SUSER   
svgid        SVGID   
svgroup      SVGROUP 
svuid        SVUID   
svuser       SVUSER  
sz           SZ      
tgid         TGID    
thcount      THCNT   
tid          TID     
time         TIME    
times        TIME    
tname        TTY     
tpgid        TPGID   
trs          TRS     
trss         TRSS    
tsig         PENDING 
tsiz         TSIZ    
tt           TT      
tty          TT      
tty4         TTY     
tty8         TTY     
ucmd         CMD     
ucomm        COMMAND 
uid          UID     
uid_hack     UID     
uname        USER    
unit         UNIT    
user         USER    
userns       USERNS  
util         C       
utsns        UTSNS   
uunit        UUNIT   
vsize        VSZ     
vsz          VSZ     
wchan        WCHAN   
wname        WCHAN   
zone         ZONE    

Kendi formatımız için örneğin:

$ ps -G www-data -o pid,time,cmd,fgroup 
    PID     TIME CMD                         FGROUP
    965 00:00:00 nginx: worker process       www-data
    966 00:00:00 nginx: worker process       www-data
    967 00:00:00 nginx: worker process       www-data
    968 00:00:00 nginx: worker process       www-data

$ ps -G burak -o pid,time,cmd f
    PID     TIME CMD
   2406 00:00:00 gdm-session-worker [pam/gdm-password]
   2565 00:00:00  \_ /usr/libexec/gdm-wayland-session env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --session=ubun
   2572 00:00:00      \_ /usr/libexec/gnome-session-binary --session=ubuntu
   2441 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login
   2419 00:00:00 /lib/systemd/systemd --user
   2420 00:00:00  \_ (sd-pam)
   2428 00:00:00  \_ /usr/bin/pipewire
   2429 00:00:00  \_ /usr/bin/pipewire-media-session

Yine custom bir format ile bir processin PID'si ile process ismini bulmak için:

$ ps -p 964 -o comm=
nginx

Sanırım bu ps komutu için bu kadar kullanımı göstermek yeterli olacak. Çünkü istediğimiz kadar farklı kombinasyonları denersek buranın sonu gelmez. İhtiyaca göre özelleştirilebilinir.


İletişime geçmek, yorum bırakmak veya hatalarımı düzetlmek istersen mail atabilirsin.

iletişim için tıklama yeri