Süreç ve Servis Yönetimi

Hedefler

  • süreçlerin listelenmesi ve yönetilmesi

Anahtar Kelimeler

  • Süreç, PID, PPID, UID
  • ps, kill, pkill, killall

Süreç Nedir

İş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.

Süreçlerin İzlenmesi

ps

İşletim sistemi üzerinde o an çalışan işlemleri izleyebileceğimiz bir komuttur.
1
PID TTY TIME CMD
2
487 pts/0 00:00:00 sudo
3
488 pts/0 00:00:00 su
4
489 pts/0 00:00:00 bash
5
6543 pts/0 00:00:00 ps
Copied!

Parametreler

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.
1
ps aux
2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
3
root 1 0.0 0.9 21964 10076 ? Ss 12:21 0:01 /sbin/init splash
4
root 2 0.0 0.0 0 0 ? S 12:21 0:00 [kthreadd]
5
root 3 0.0 0.0 0 0 ? I< 12:21 0:00 [rcu_gp]
6
root 4 0.0 0.0 0 0 ? I< 12:21 0:00 [rcu_par_gp]
7
root 6 0.0 0.0 0 0 ? I< 12:21 0:00 [kworker/0:0H-kblockd]
8
root 8 0.0 0.0 0 0 ? I< 12:21 0:00 [mm_percpu_wq]
9
root 9 0.0 0.0 0 0 ? S 12:21 0:00 [ksoftirqd/0]
10
root 10 0.0 0.0 0 0 ? I 12:21 0:04 [rcu_sched]
11
root 11 0.0 0.0 0 0 ? I 12:21 0:00 [rcu_bh]
12
root 12 0.0 0.0 0 0 ? S 12:21 0:00 [migration/0]
13
root 14 0.0 0.0 0 0 ? S 12:21 0:00 [cpuhp/0]
14
root 15 0.0 0.0 0 0 ? S 12:21 0:00 [kdevtmpfs]
15
root 16 0.0 0.0 0 0 ? I< 12:21 0:00 [netns]
16
root 17 0.0 0.0 0 0 ? S 12:21 0:00 [kauditd]
17
root 18 0.0 0.0 0 0 ? S 12:21 0:00 [khungtaskd]
18
root 19 0.0 0.0 0 0 ? S 12:21 0:00 [oom_reaper]
19
root 20 0.0 0.0 0 0 ? I< 12:21 0:00 [writeback]
20
root 21 0.0 0.0 0 0 ? S 12:21 0:00 [kcompactd0]
21
root 22 0.0 0.0 0 0 ? SN 12:21 0:00 [ksmd]
22
root 23 0.0 0.0 0 0 ? SN 12:21 0:00 [khugepaged]
23
root 24 0.0 0.0 0 0 ? I< 12:21 0:00 [crypto]
24
root 25 0.0 0.0 0 0 ? I< 12:21 0:00 [kintegrityd]
Copied!

top

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.
1
top - 15:33:12 up 4:48, 2 users, load average: 0.00, 0.00, 0.00
2
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
3
%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
4
MiB Mem : 987.4 total, 820.8 free, 57.9 used, 108.7 buff/cache
5
MiB Swap: 975.0 total, 975.0 free, 0.0 used. 802.3 avail Mem
6
7
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8
1 root 20 0 103664 9916 7916 S 0.0 1.0 0:00.75 systemd
9
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
10
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
11
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
12
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
13
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
14
9 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0
15
10 root 20 0 0 0 0 I 0.0 0.0 0:02.04 rcu_sched
16
11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
17
12 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/0
18
13 root 20 0 0 0 0 I 0.0 0.0 0:07.80 kworker/0:1-events_power_efficient
19
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
20
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
21
16 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
22
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
23
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
24
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
25
20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
26
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
27
22 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
28
23 root 39 19 0 0 0 S 0.0 0.0 0:00.07 khugepaged
29
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 crypto
Copied!

pstree

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.
1
apt install psmisc
Copied!
Paket kurulduktan sonra pstree komutu ile süreç ağacı görüntülenebilir.
2
systemd─┬─agetty
3
├─cron
4
├─dbus-daemon
5
├─dhclient
6
├─liman_render───4*[{liman_render}]
7
├─liman_system───4*[{liman_system}]
8
├─nginx───nginx
9
├─php
10
├─php-fpm7.3───3*[php-fpm7.3]
11
├─postgres───16*[postgres]
12
├─python3
13
├─redis-server───3*[{redis-server}]
14
├─rsyslogd───3*[{rsyslogd}]
15
├─sshd─┬─2*[sshd───sshd───bash───sleep]
16
│ ├─sshd───sshd───bash───pstree
17
│ └─sshd───sshd───sftp-server
18
├─supervisord───9*[php]
19
├─systemd-journal
20
├─systemd-logind
21
├─systemd-timesyn───{systemd-timesyn}
22
├─systemd-udevd
23
└─websockify
Copied!

Süreçlerin Yönetilmesi

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

kill

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.
1
kill 10384
Copied!
Eğer birden fazla process pid'si ile birlikte öldürülmek isteniyorsa -9 parametresi kullanılmalıdır.
1
kill -9 10385 10386
Copied!

pkill

Eğer sistem üzerinde öldürülmek istenen süreç, pid'si yerine adı ile öldürülmek isteniyorsa pkill komutu kullanılır.
1
pkill -9 -u vim
Copied!

killall

Eğer öldürülmek istenen tekil bir süreç yerine süreç ailesi ise killall komutu kullanılmalıdır.
1
killall -9 apache
Copied!
Last modified 2mo ago