Süreç ve Servis Yönetimi
- süreçlerin listelenmesi ve yönetilmesi
- Süreç, PID, PPID, UID
- ps, kill, pkill, killall
İşletim sistemi üzerinde ön planda ya da arka planda çalışan program parçalarından her birine process yani süreç denir. Süreçlerin yönetilebilmesi için bazı kavramların bilinmesi gerekmektedir.
- Her bir sürecin kendisine ait bir süreç kimliği vardır (PID)
- Her sürecin bir ata süreci vardır (PPID)
- USER Sürecin sahibi olan kullanıcı.
- TTY Kullanıcının o an yapmış oldığı kabuğu ifade eder.
- COMMAND Süreci başlatan komutu ifade eder.
- TIME Sürecin CPU'da harcadığı süre.
- START Sürecin başladığı saat
- STAT Sürecin o anki durumunu ifade eder.
- -S : Sürecin beklemede olduğunu gösterir.
- -R : Sürecin o an çalıştığını,CPU'da işlem gördüğünü belirtir.
- -D : Süreç kesilemez bir şekilde uykuda.
- -T : Sürecin debugger'da incelendiğini ya da durdurulduğunu gösterir.
- -Z : Süreç zombi durumunda.
- CPU kullanımının yüzde kaçının ilgili sürece ait olduğu %CPU sütununda gösterilir.
- Sürecin belleğin yüzde kaçını kullandığı bilgisi %MEM sütununda gösterilir.
İşletim sistemi üzerinde o an çalışan işlemleri izleyebileceğimiz bir komuttur.
PID TTY TIME CMD
487 pts/0 00:00:00 sudo
488 pts/0 00:00:00 su
489 pts/0 00:00:00 bash
6543 pts/0 00:00:00 ps
En çok kullanılan parametreler aşağıdakilerdir:
-a: Belirli bir terminal kontrölündeki o an çalışan süreçleri listeler
-u: Süreç sahiplerini de listeler
-x: Bir kabul kontrolünde olmayan süreçleri listeler. (TTY sütununda ? ile ifade edilirler.)
Diğer parametreler:
- -A : Sistemdeki bütün süreçleri listeler.
- -r : Sadece çalışmakta olan süreçleri listeler.
- -f : Süreçler arasındaki parent-child ilişkilerini gösterir.
- -l : Uzun formatlı bir liste üretir.
- -w : Bir sürecin komut satırı parametrelerini gösterir.
- -C : Bir süreç ile birlikte o sürecin alt süreçlerini listeler.
- T : Komutun girildiği terminalde başlatılan süreçleri listeler.
- p : PID değeri girilen sürecin bilgilerini gösterir.
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.9 21964 10076 ? Ss 12:21 0:01 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 12:21 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 12:21 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 12:21 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 12:21 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I< 12:21 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S 12:21 0:00 [ksoftirqd/0]
root 10 0.0 0.0 0 0 ? I 12:21 0:04 [rcu_sched]
root 11 0.0 0.0 0 0 ? I 12:21 0:00 [rcu_bh]
root 12 0.0 0.0 0 0 ? S 12:21 0:00 [migration/0]
root 14 0.0 0.0 0 0 ? S 12:21 0:00 [cpuhp/0]
root 15 0.0 0.0 0 0 ? S 12:21 0:00 [kdevtmpfs]
root 16 0.0 0.0 0 0 ? I< 12:21 0:00 [netns]
root 17 0.0 0.0 0 0 ? S 12:21 0:00 [kauditd]
root 18 0.0 0.0 0 0 ? S 12:21 0:00 [khungtaskd]
root 19 0.0 0.0 0 0 ? S 12:21 0:00 [oom_reaper]
root 20 0.0 0.0 0 0 ? I< 12:21 0:00 [writeback]
root 21 0.0 0.0 0 0 ? S 12:21 0:00 [kcompactd0]
root 22 0.0 0.0 0 0 ? SN 12:21 0:00 [ksmd]
root 23 0.0 0.0 0 0 ? SN 12:21 0:00 [khugepaged]
root 24 0.0 0.0 0 0 ? I< 12:21 0:00 [crypto]
root 25 0.0 0.0 0 0 ? I< 12:21 0:00 [kintegrityd]
Bir önceki ps komutu yalnızca o anki süreçleri listeleyen bir komuttur. Süreçler durumlarını dinamik olarak görüntülenmek isteniyorsa top komutu kullanılır.
top aynı zamanda sistem üzerindeki süreçlerin sayısını ve bu süreçlerin kaçınının çalıştığını, uyuduğunu, durduğunu ya da zombi sürece dönüştüğünü gösterir.
top - 15:33:12 up 4:48, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 987.4 total, 820.8 free, 57.9 used, 108.7 buff/cache
MiB Swap: 975.0 total, 975.0 free, 0.0 used. 802.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 103664 9916 7916 S 0.0 1.0 0:00.75 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0
10 root 20 0 0 0 0 I 0.0 0.0 0:02.04 rcu_sched
11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
12 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/0
13 root 20 0 0 0 0 I 0.0 0.0 0:07.80 kworker/0:1-events_power_efficient
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
16 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
22 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
23 root 39 19 0 0 0 S 0.0 0.0 0:00.07 khugepaged
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 crypto
ps'den farklı olarak pstree, çalışan işlemleri bir ağaç yapısında gösterir. Bu sayede görsellik artar ve bir sürecin ebeveyn süreçlerini bulmak kolaylaşır.
pstree bazı sistemlerde kurulu gelmediğinden ötürü öncelikle sistem üzerine psmisc paketini kurmak gerekmektedir.
apt install psmisc
Paket kurulduktan sonra pstree komutu ile süreç ağacı görüntülenebilir.
[email protected]:~$ pstree
systemd─┬─agetty
├─cron
├─dbus-daemon
├─dhclient
├─liman_render───4*[{liman_render}]
├─liman_system───4*[{liman_system}]
├─nginx───nginx
├─php
├─php-fpm7.3───3*[php-fpm7.3]
├─postgres───16*[postgres]
├─python3
├─redis-server───3*[{redis-server}]
├─rsyslogd───3*[{rsyslogd}]
├─sshd─┬─2*[sshd───sshd───bash───sleep]
│ ├─sshd───sshd───bash───pstree
│ └─sshd───sshd───sftp-server
├─supervisord───9*[php]
├─systemd-journal
├─systemd-logind
├─systemd-timesyn───{systemd-timesyn}
├─systemd-udevd
└─websockify
Tıpkı diğer işletim sistemlerinde olduğu gibi GNU/Linux sistemler üzerinde de kimi zaman bazı komut ya da programlar çalışmasını tamamlayamamaktadır. Bu da sistemin ya da ilgili komut/programın yanıt vermemesine sebep olmaktadır.
Yanıt vermeyen programlarla baş etmenin bazı zamanlarda tek çözümü programa ait süreç veya süreçlerin durdurulmasıdır.
Bu noktada durdurmak istediğimiz sürecin tekil süreç veya süreç ailesi olmasına göre iki farklı yöntem izleyebiliriz
Sistem üzerinde çalışan herhangi bir sürecin pid numarasını parametre olarak alır ve parametre olarak aldığı bu değerin ait olduğu süreci öldürür.
kill 10384
Eğer birden fazla process pid'si ile birlikte öldürülmek isteniyorsa -9 parametresi kullanılmalıdır.
kill -9 10385 10386
Eğer sistem üzerinde öldürülmek istenen süreç, pid'si yerine adı ile öldürülmek isteniyorsa pkill komutu kullanılır.
pkill -9 -u vim
Eğer öldürülmek istenen tekil bir süreç yerine süreç ailesi ise killall komutu kullanılmalıdır.
killall -9 apache
Last modified 1yr ago