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.

  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

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.

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]

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.

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

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.

apt install psmisc

Paket kurulduktan sonra pstree komutu ile süreç ağacı görüntülenebilir.

liman@limanmys:~$ 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

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.

 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

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.

pkill -9 -u vim

killall

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 updated