Merhabalar
Bu yazıda linux türevi sistemlerde çalışan ps komutunun kullanımına ve detaylarına değineceğim. Linux türevi sistemlerde çalışan ps komutu sistem üzerinde çalışan süreçleri görebilmenizi sağlar. Bunların arasından süreç kontrolü, süreç sorumlusu, süreç numarası, çalıştırılan komut, zaman, cpu, bellek gibi birçok bilgi görebilirsiniz.
NOT : Bu ps komutu /proc dizini içerisinden gerekli olan dosyaların içerisinden bilgileri alıp size çıktı olarak sunuyor.
Sistemde çalışan tüm süreçleri görebilmek için -e veya -A parametresi kullanılabilir.
root# ps -e
PID TTY TIME CMD
1 ? 00:00:01 systemd
2 ? 00:00:03 kthreadd
3 ? 00:00:03 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:01:42 rcu_sched
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 migration/0
10 ? 00:00:00 watchdog/0
11 ? 00:00:00 watchdog/1
12 ? 00:00:00 migration/1
13 ? 00:00:03 ksoftirqd/1
15 ? 00:00:00 kworker/1:0H
16 ? 00:00:00 watchdog/2
17 ? 00:00:00 migration/2
18 ? 00:00:51 ksoftirqd/2
20 ? 00:00:00 kworker/2:0H
21 ? 00:00:00 watchdog/3
22 ? 00:00:00 migration/3
23 ? 00:00:02 ksoftirqd/3
25 ? 00:00:00 sshd
...
Örneğin, bir PID ( Process ID ) numarasının üzerinde çalıştırdığı süreci görüntülemek isterseniz -p parametresi ile birlikte PID numarasını belirtebilirsiniz.
root# ps -p 25
PID TTY TIME CMD
25 pts/1 00:00:02 sshd
Örneğin, bir sürecin PID numarasını bulmak isterseniz ” grep ” komutunun yardımı ile aşağıdaki komut kullanılabilir. Aşağıdaki komut bütün süreçlere bakıcak ve süreçlerin içerisinde sshd kelimesi geçen süreçleri listeleyecektir. Aşağıda gördüğünüz gibi birçok süreç numarası var. Ben asıl süreç numarasını tespit etmek istiyorum o zaman ikinci komutu kullanarak tek süreç numarasını bulabilirim.
root# ps -e | grep sshd
850 ? 00:00:00 sshd
27509 ? 00:00:00 sshd
27510 ? 00:00:00 sshd
27512 ? 00:00:00 ssh
27513 ? 00:00:00 ssh
root# services ssh status
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
Active: active (running) since Fri 2015-06-12 08:16:35 EEST; 13h ago
Process: 2100 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 850 (sshd)
CGroup: /system.slice/ssh.service
├─ 850 /usr/sbin/sshd -D
Yukarıdaki örneğimizin aynısı sadece daha pratik bir komut. Aşağıdaki komutu kullanarak bir sürecin tek bir PID ( Process ID ) numarasını bulabilirsiniz.
root# pidof sshd
850
root# pidof 850
sshd
Sistem üzerinde çalışan süreçlerin hangi terminal üzerinde çalıştığını görmek isterseniz aşağıdaki komutu kullanabilirsiniz. Aşağıdaki t parametresini ps komutunun birçok parametresi ile birlikte kullanabilirsiniz.
root# ps -a t
PID TTY STAT TIME COMMAND
5847 pts/0 Ss 0:00 bash
5996 pts/1 S 0:00 su - root
6005 pts/1 S 0:00 sudo
14585 pts/0 S 0:00 su - root
14594 pts/3 S 0:00 su
27505 pts/2 S+ 0:00 ssh [email protected]
27508 pts/1 S+ 0:00 ssh localhost
Bir kullanıcının çalıştırdığı süreçleri görüntülemek isterseniz ps komutunun -u parametresini kullanabilirsiniz. Başka bir seçenek ise pgrep komutuda aynı işlevi görmektedir. Tabi ps komutu ile pgrep komutu aralarında avantajları ve dezavantajları bulunmaktadır.
root# ps -u root
PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:03 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:01:52 rcu_sched
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 migration/0
10 ? 00:00:00 watchdog/0
11 ? 00:00:00 watchdog/1
...
root# pgrep -lu root
1 systemd
2 kthreadd
3 ksoftirqd/0
5 kworker/0:0H
7 rcu_sched
8 rcu_bh
9 migration/0
10 watchdog/0
11 watchdog/1
Sistemde çalışan süreçlerin süreç numarasını ( PID ) öğrenmek istersek aşağıdaki komuttan faydalanabiliriz. Örneğin, pgrep chrome komutu ile chrome servisine ait süreç numalarına bakabiliriz.
root# pgrep chrome
2487
2498
2499
2501
2504
2523
2530
2555
2566
2976
Aşağıdaki komut yardımıyla çalışan süreçlerin farklı zamanlayıcı bilgilerini görebilirsiniz.
root# ps -a -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14585 5847 0 80 0 - 16360 - pts/1 00:00:00 su
4 S 0 14594 14585 0 80 0 - 5923 - pts/0 00:00:00 bash
0 R 0 28140 14594 0 80 0 - 2670 - pts/3 00:00:00 ps
0 S 0 14564 6005 0 80 0 - 4214 - pts/1 00:00:00 man
Birden fazla PID ( Process ID ) numarasına ait süreçleri görüntülemek isterseniz -p parametresini kullanabilirsiniz. Birden fazla PID numarası eklemek için PID numaralarının aralarına virgül bırakabilirsiniz.
root# ps -f -p 25023,2409,1072,847,15,1
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:16 ? 00:00:02 /sbin/init
root 15 2 0 08:16 ? 00:00:00 [kworker/1:0H]
root 1072 1 0 08:16 ? 00:00:11 /usr/sbin/NetworkManager --no-daemon
root 847 1 0 08:16 ? 00:00:00 /usr/sbin/ModemManager
ali 2409 1 0 08:17 ? 00:00:08 nm-applet
ali 25023 2504 0 19:57 ? 00:00:01 /opt/google/chrome/chrome
Mesela, sistem süreçleri çalışırken hangi sürecin daha fazla cpu ve memory tükettiğini görmek isterseniz aşağıdaki komutu kullanabilirsiniz.
root# ps aux --sort=pcpu,+pmem
Herhangi bir PID numarasına ait sürecin detaylarını görüntülemek isterseniz aşağıdaki komut kullanılabilir.
root# ps -v -p 5842
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
5842 pts/0 Sl 50:08 1164 170 3509401 1016040 26.4 xfce4-terminal
Güvenlik için aşağıdaki komutlar süreçler ile ilgili birçok bilgi vermektedir. Aşağıdaki komutlara benzer komutları görmek için ps aracının man sayfasına bakabilirsiniz. Süreçler arasında dikkatinizi çeken ilginç bir süreç var ise google ‘da araştırma yaparak süreç hakkında daha fazla bilgi alabilirsiniz ve ona göre davranabilirsiniz.
1. ps -eo euser,ruser,suser,fuser,f,comm,tty,cpu,start
2. ps axZ
3. ps -eM
root# ps -eo euser,ruser,suser,fuser,f,comm,tty,cpu,start
EUSER RUSER SUSER FUSER F COMMAND TT CPU STARTED
ali ali ali ali 0 xfce4-terminal ? - 09:04:07
ali ali ali ali 0 gnome-pty-helpe ? - 09:04:08
ali ali ali ali 0 bash pts/0 - 09:04:08
ali ali ali ali 1 chrome ? - 10:29:45
ali ali ali ali 0 vmware-tray ? - 10:43:23
ali ali ali ali 0 gvfsd-burn ? - 11:24:16
ali ali ali ali 0 dconf-service ? - 11:24:17
root root root root 4 su pts/0 - 13:53:04
root root root root 4 bash pts/0 - 13:53:09
ali ali ali ali 1 chrome ? - 13:54:49
root root root root 1 kworker/0:1 ? - 15:16:15
ali ali ali ali 1 chrome ? - 17:15:01
ali ali ali ali 1 chrome ? - 18:00:50
ali ali ali ali 0 bash pts/2 - 18:42:01
root root root root 1 kworker/1:0 ? - 18:54:15
ali ali ali ali 1 chrome ? - 19:00:02
ali ali ali ali 1 chrome ? - 19:25:55
ali ali ali ali 1 chrome ? - 19:34:20
root root root root 1 kworker/1:1 ? - 19:50:54
ali ali ali ali 0 mousepad ? - 20:36:18
Aşağıdaki komutu kullanarak en fazla memory,cpu kullanan süreçlerin süreç numarası, kullanıcı vb. birçok bilgiyi anlık olarak izleyebilirsiniz.
root# watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
PID USER CMD %MEM %CPU
5842 root xfce4-terminal 26.6 6.3
2523 ali /opt/google/chrome/chrome - 5.9 3.8
26094 ali /opt/google/chrome/chrome - 5.5 21.3
2487 ali /opt/google/chrome/chrome - 5.1 8.0
2976 ali /opt/google/chrome/chrome - 5.0 1.8
25608 ali /opt/google/chrome/chrome - 5.0 8.0
27102 ali /opt/google/chrome/chrome - 3.3 1.0
5316 ali /opt/google/chrome/chrome - 2.9 1.5
23170 ali /opt/google/chrome/chrome - 2.8 0.1
26675 ali /opt/google/chrome/chrome - 2.6 0.2
26308 ali /opt/google/chrome/chrome - 2.6 0.1
5489 ali /opt/google/chrome/chrome - 2.5 1.2
26868 ali /opt/google/chrome/chrome - 2.5 0.2
27898 ali /opt/google/chrome/chrome - 2.5 0.4
Linux / Unix Sistemlerde Kill Komutu ile Süreçleri Öldürmek
Linux / Unix sistemlerde kill komutu durmuş ve duraklamış cevap vermeyen süreçler için kullanılmaktadır. Kill komutu ile süreçlere belirli sinyaller göndererek kapanlamalarını sağlayabilirsiniz. Eğer herhangi bir sinyal ifadesi verilmediyse varsayılan olarak SIGTERM sinyali kullanılır.
Bir süreç numarasını ( PID ) öldürmek için,
root# kill 2250
Birden fazla süreç numarasını öldürmek için,
root# kill 2250 9892 2590 5420
Bir süreci öldürmek için,
root# kill chrome
Özel olarak öldürmek istediğiniz bir süreç ailesi var ise aşağıdaki komut kullanılabilir. Bütün chrome süreçleri öldürmek için,
root# pkill chrome
Örneğin, Ali kullanıcısına ait kullanılan ssh sürecini öldürmek için aşağıdaki birinci komut kullanılabilir. İkinci komut ise ssh sürecine ait PID numarası ve sadece verilen PID numarasını öldürür.
root# kill -9 -u ali ssh
root# kill -9 -u ali 850
Bir süreci kill komutu ile öldüremezseniz -9 ( SIGKILL ) numarasını kullanarak daha öldürücü bir sinyal göndererek öldürebilirsiniz.
root# kill -9 ssh
Daha fazla bilgi için aşağıdaki komut kullanılabilir.
root# man ps
Leave a Reply