Açık Kaynak İşletim Sistemleri

8 - Süreçler

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2025

Süreç (Process) Nedir?

Süreç (Process): Belleğe yüklenmiş ve işlemcide (CPU) yürütülmekte olan bir program örneğidir. Çalışan bir programın bellekteki aktif temsilidir.

Süreçlerin Programdan Farkı

Program vs. Süreç:

  • Program: Disk üzerinde bulunan, çalıştırılabilir kod ve verilerden oluşan pasif bir dosyadır (örn: /usr/bin/bash).
  • Süreç: Programın çalıştırılmasıyla oluşan, kendine ait kaynakları olan aktif bir varlıktır.

Süreç İçeriği

Bir Sürecin İçeriği:

  • Kod Bölümü (Text Segment): Programın çalıştırılabilir komutları.
  • Veri Bölümü (Data Segment): Global ve statik değişkenler.
  • Yığın Dışı Bellek (Heap): Çalışma zamanında dinamik olarak ayrılan bellek (malloc).
  • Yığın (Stack): Fonksiyon çağrıları, yerel değişkenler, dönüş adresleri.
  • İşlemci Bağlamı: Program sayacı (PC), işlemci yazmaçları (CPU registers) vb.
  • Açık Dosya Tanıtıcıları (File Descriptors): Erişilen dosyalar, soketler vb.
  • Diğer Kaynaklar: PID, PPID, öncelik bilgileri vb.

PID ve PPID Numaraları

  • PID (Process ID): Her sürece ait benzersiz Süreç Numarası. Yönetim için kullanılır.
  • PPID (Parent Process ID): Süreci başlatan Ebeveyn Süreç Numarası. Süreçler arası hiyerarşiyi oluşturur (pstree).
  • Linux’ta ilk süreç systemd (PID: 1, PPID: 0 - çekirdek).
  • systemd, diğer sistem servislerini ve kullanıcı oturumlarını başlatır.

Süreçleri Yönetmekte Kullanılan Komutlar

  • ps
  • pstree
  • top / htop
  • pgrep / pidof
  • kill / pkill / killall
  • &, jobs, fg, bg
  • nohup
  • nice / renice
  • xkill
  • systemctl

ps - Süreçleri Görüntüleme

  • Çalışan süreçleri listeler.
  • Parametresiz ps: Mevcut kabuk oturumundaki süreçleri gösterir.
cezmi@ubuntu:~$ ps
  PID TTY          TIME CMD
 1969 pts/0    00:00:00 bash
 3050 pts/0    00:00:00 ps

ps - Detaylı Bilgi (-f, -l) ve PPID

  • -f (full format) veya -l (long format): UID, PPID, C (CPU%), STIME gibi ek bilgiler sunar.
cezmi@ubuntu:~$ ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
cezmi       1969    1960  0 10:44 pts/0    00:00:00 bash
cezmi       3105    1969  0 11:45 pts/0    00:00:00 ps -f
  • Örnek: ps -f (PID 3105) sürecinin ebeveyni bash (PPID 1969).

ps - Tüm Süreçleri Görüntüleme (aux)

  • Sistemdeki tüm süreçleri BSD sözdizimi ile gösterir (- kullanılmaz).
# BSD Örneği (İlk 5 satır)
cezmi@ubuntu:~$ ps aux | head -n 5
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.3  0.7 175120 11200 ?        Ss   10:42   0:01 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    10:42   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   10:42   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   10:42   0:00 [rcu_par_gp]
  • Sütunlar: USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND.

ps - Tüm Süreçleri Görüntüleme (-ef)

  • Sistemdeki tüm süreçleri System V sözdizimi ile gösterir (- kullanılır).
# System V Örneği (İlk 5 satır)
cezmi@ubuntu:~$ ps -ef | head -n 5
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 10:42 ?        00:00:01 /sbin/init splash
root           2       0  0 10:42 ?        00:00:00 [kthreadd]
root           3       2  0 10:42 ?        00:00:00 [rcu_gp]
root           4       2  0 10:42 ?        00:00:00 [rcu_par_gp]
  • aux ve -ef benzer bilgileri farklı formatlarda sunar. İkisi de yaygındır.

ps - Çıktıyı Sıralama (--sort)

  • ps aux veya ps -ef çıktısını belirli bir alana göre sıralar.
  • - : Azalan sıra (en yüksek üstte).
  • + veya yok: Artan sıra (en düşük üstte).
# CPU kullanımına göre azalan sıralama (en çok kullananlar):
ps aux --sort=-%cpu | head

# Bellek kullanımına göre azalan sıralama:
ps aux --sort=-%mem | head

ps - Belirli Kullanıcının Süreçleri (-u)

  • -u <kullanıcı_adı>: Sadece belirtilen kullanıcıya ait süreçleri listeler.
cezmi@ubuntu:~$ ps -u cezmi | head -n 5
  PID TTY          TIME CMD
 1262 ?        00:00:00 systemd
 1263 ?        00:00:00 (sd-pam)
 1268 ?        00:00:00 pipewire
 1271 ?        00:00:00 wireplumber
 1273 ?        00:00:00 gnome-keyring-d

ps - Süreç Numarasına Göre Bilgi Alma (-p)

  • -p <PID1>,<PID2>,...: Belirtilen PID veya PID’lere ait bilgileri gösterir.
# PID 1 (systemd) ve PID 1969 (bash) için detaylı bilgi:
cezmi@ubuntu:~$ ps -p 1,1969 -f
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 10:42 ?        00:00:01 /sbin/init splash
cezmi       1969    1960  0 10:44 pts/0    00:00:00 bash

ps - Süreç Listesinde Filtreleme (grep)

  • ps çıktısını | (pipe) ile grep’e yönlendirerek filtreleme yapılır.
# İçinde "ssh" geçen süreçleri bul:
cezmi@ubuntu:~$ ps aux | grep "ssh"
root        1010  0.0  0.1  10568  3456 ?        Ss   10:43   0:00 /usr/sbin/sshd -D
cezmi       1515  0.0  0.3  15680  6144 ?        Ss   10:44   0:00 /usr/bin/ssh-agent ..
cezmi       3502  0.0  0.0   6432   768 pts/0    S+   11:55   0:00 grep --color=auto ssh
  • Not: grep komutunun kendisi de sonuçlarda çıkabilir. (pgrep daha temiz sonuç verir).

pstree - Süreç Ağacı

  • Süreçleri ebeveyn-çocuk ilişkisine göre hiyerarşik bir ağaç yapısında gösterir.
  • -p: PID numaralarını da gösterir.
  • -a: Komut satırı argümanlarını da gösterir.
cezmi@ubuntu:~$ pstree -p | head -n 10 # Örnek çıktı başı
systemd(1)─┬─ModemManager(860)─┬─{ModemManager}(875)
                              └─{ModemManager}(876)
           ├─NetworkManager(870)─┬─{NetworkManager}(910)
                                └─{NetworkManager}(911)
           ├─accounts-daemon(880)─┬─{accounts-daemon}(905)
                                 └─{accounts-daemon}(908)
           ├─acpid(881)
           ├─agetty(1110)
           ├─anacron(883)
           ├─atd(885)

top - Dinamik Süreç Görüntüleyici

  • Sistem kaynak kullanımını (CPU, Bellek vb.) anlık olarak gösterir.
  • Varsayılan olarak CPU kullanımına göre sıralıdır ve periyodik olarak güncellenir.
  • Etkileşimlidir: k (kill), r (renice), h (yardım), q (çıkış).
# 'top' komutunun tipik çıktısının üst kısmı:
top - 12:05:10 up 1:23,  1 user,  load average: 0.15, 0.10, 0.11
Tasks: 210 total,   1 running, 209 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.1 us,  1.0 sy,  0.0 ni, 96.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1985.7 total,    750.1 free,    820.6 used,    415.0 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.    980.5 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1527 cezmi     20   0 3512400 345120  83500 S   5.0  17.4   2:10.55 gnome-shell
   1319 cezmi     20   0  260100  36200  17100 S   2.5   1.8   0:45.30 Xorg
   3650 cezmi     20   0   15000   3800   3100 R   1.0   0.2   0:00.05 top
   ...

top Komutu Çıktısı - Özet Alanı

İlk 5 Satır:

  • top satırı: Saat, uptime, kullanıcı sayısı, yük ortalamaları (1, 5, 15 dk).
  • Tasks satırı: Toplam süreç sayısı ve durumlarına göre dağılım (running, sleeping, stopped, zombie).
  • %Cpu(s) satırı: CPU kullanımının dökümü (us: user, sy: system, ni: nice, id: idle, wa: wait…).
  • MiB Mem satırı: Fiziksel Bellek (RAM) kullanımı (total, free, used, buff/cache).
  • MiB Swap satırı: Takas Alanı (Swap) kullanımı (total, free, used, avail Mem).

top Komutu Çıktısı - Süreç Listesi

Süreç Listesi Sütunları (Yaygın Olanlar):

  • PID: Süreç ID.
  • USER: Süreç sahibi kullanıcı.
  • PR: Öncelik (kernel tarafından atanır).
  • NI: Nice değeri (kullanıcı tarafından etkilenebilir öncelik).
  • VIRT: Sanal Bellek Boyutu.
  • RES: Fiziksel Bellek Kullanımı (Resident Set Size).
  • SHR: Paylaşılan Bellek Boyutu.
  • S: Süreç Durumu (R, S, D, Z, T…).
  • %CPU: Son güncellemeden beri CPU kullanım yüzdesi.
  • %MEM: Fiziksel bellek kullanım yüzdesi.
  • TIME+: Toplam CPU kullanım süresi.
  • COMMAND: Çalıştırılan komut adı/yolu.

Süreç Durumları (Process States - STAT/S)

ps veya top/htop çıktısındaki STAT veya S sütunu sürecin durumunu gösterir:

  • R (Running/Runnable): Çalışıyor veya CPU sırası bekliyor.
  • S (Interruptible Sleep): Bir olayı bekliyor (G/Ç, sinyal vb). Kesilebilir. (En yaygın durum).
  • D (Uninterruptible Sleep): Genellikle G/Ç bekleyen, sinyalle kesilemeyen uyku. (Dikkatli olun!).
  • Z (Zombie / Defunct): Süreç sonlanmış, ancak ebeveyni çıkış kodunu okumamış. Kaynak kullanmaz, PID tablosunda yer kaplar.
  • T (Stopped): Bir sinyal ile (Ctrl+Z -> SIGTSTP, SIGSTOP) durdurulmuş.
  • I (Idle): Çekirdek thread’leri için kullanılır (nadiren görülür).

Zombie ve Orphan (Yetim) Süreçler

  • Zombie Süreç: Sonlanmış ama ebeveyni wait() sistem çağrısı ile durumunu henüz okumamış süreç. <defunct> olarak da görünebilir. Çok sayıda zombie, ebeveyn süreçte sorun olduğunu gösterebilir.

  • Orphan (Yetim) Süreç: Ebeveyni, kendisi çalışmaya devam ederken sonlanan süreç. Otomatik olarak systemd (PID 1) tarafından “evlat edinilir”. systemd, bu süreçler bittiğinde durumlarını okuyarak zombie olmalarını engeller.

Süreç Önceliği (Priority ve Niceness)

İşletim sistemi, CPU kaynağını süreçler arasında önceliklendirerek paylaştırır.

  • Priority (PR): Çekirdeğin dinamik olarak hesapladığı öncelik (top’ta görünür).
  • Niceness (NI): Kullanıcının/yöneticinin belirlediği öncelik ipucu:
    • Değer Aralığı: -20 (en yüksek öncelik) ile +19 (en düşük öncelik).
    • Varsayılan: Genellikle 0.
    • Düşük NI değerli süreçler CPU’da daha çok pay alır.
  • Komutlar:
    • nice -n <değer> komut: Komutu belirli nice değeriyle başlatır.
    • renice <yeni_değer> -p <PID>: Çalışan sürecin nice değerini değiştirir (genellikle sudo gerekir).

htop - Gelişmiş Süreç Görüntüleyici

  • top’a alternatif, daha renkli, kullanıcı dostu, fare destekli ve etkileşimli bir araç.
  • Kurulum: sudo apt update && sudo apt install htop

top ile htop Karşılaştırması:

Özellik top htop
Görünüm Tek renkli Renkli, Çubuk grafikler
Kaydırma Yok Dikey ve Yatay
Fare Desteği Yok Var (seçim, tıklama)
Süreç Seçimi/İşlem Zor Kolay (Space, Enter)
Süreç Öldürme (kill) Etkileşimli (k) Kolay (F9)
Öncelik (nice) Etkileşimli (r) Kolay (F7/F8)
Ağaç Görünümü Yok Var (F5 veya t)
Kurulum Genellikle var Genellikle kurulmalı

PID Bulma (pgrep, pidof)

Süreçleri adlarına veya başka özelliklerine göre bulmak için:

  • pgrep [seçenekler] desen:
    • Desene uyan süreçlerin PID’lerini listeler. Daha esnek, regex destekler.
    • pgrep firefox
    • pgrep -u cezmi bash (Kullanıcıya göre)
    • pgrep -f "python .*script.py" (Tam komut satırına göre)
  • pidof <komut_adı>:
    • Sadece tam olarak eşleşen komut adına sahip süreçlerin PID’lerini listeler.
    • pidof bash
    • pidof /usr/sbin/sshd

Sinyaller (Signals) - Süreçler Arası İletişim

Süreçler arası veya çekirdek-süreç arası iletişim/kontrol mekanizmasıdır.

Sık Kullanılan Sinyaller:

Sinyal Adı No Açıklama Tetikleyici Örnekleri
SIGHUP 1 Bağlantı Kesilmesi / Yapılandırma Yeniden Yükle Terminal Kapanması, kill -1
SIGINT 2 Kesme İsteği (Interrupt) Ctrl+C
SIGQUIT 3 Çıkış İsteği (Quit), Core Dump Oluşturabilir Ctrl+\
SIGKILL 9 Öldür (Koşulsuz Sonlandırma) - Yakalanmaz! kill -9, pkill -9
SIGTERM 15 Sonlandır (Düzgün Kapanma İsteği) - Varsayılan kill, pkill, Shutdown
SIGSTOP 19 Durdur (Geçici Duraklatma) - Yakalanmaz! kill -19
SIGTSTP 20 Terminalden Durdurma İsteği Ctrl+Z
SIGCONT 18 Devam Et (Durdurulmuş Süreci Sürdür) fg, bg, kill -18

Süreçlere Sinyal Gönderme (kill, pkill, killall)

  • kill <PID> [PID...]: Belirtilen PID’lere sinyal gönderir (varsayılan SIGTERM).
    • kill 1234 5678
    • kill -9 1234 veya kill -KILL 1234 (SIGKILL ile zorla kapatma)
  • pkill [seçenekler] desen: pgrep gibi süreçleri bulur ve onlara sinyal gönderir (varsayılan SIGTERM).
    • pkill firefox
    • pkill -9 -u guest gedit (SIGKILL ile, kullanıcıya göre)
  • killall <komut_adı>: Belirtilen komut adına sahip tüm süreçlere sinyal gönderir (varsayılan SIGTERM).
    • killall gedit
    • DİKKAT: Yanlışlıkla önemli süreçleri kapatabileceğinden dikkatli kullanılmalıdır!

Arka Planda Süreç Başlatma (&)

  • Bir komutun sonuna & ekleyerek onu doğrudan arka planda başlatabilirsiniz.
  • Terminali başka komutlar için hemen kullanmaya devam edebilirsiniz.
  • Kabuk, iş numarasını ([1]) ve sürecin PID’sini gösterir.
find / -name "*.tmp" -delete &
[1] 5120
  • Arka plandaki iş bittiğinde kabuk genellikle bir mesaj gösterir.

Süreci Durdurma (Ctrl+Z) ve Arka Planda Devam (bg)

  • Ctrl+Z: Ön planda çalışan bir süreci durdurur (SIGTSTP sinyali gönderir). Süreç sonlanmaz, sadece beklemeye alınır.

    cezmi@ubuntu:~$ sleep 300 # Ön planda çalışıyor...
    ^Z
    [1]+  Stopped                 sleep 300
  • bg %[iş_no]: Durdurulmuş bir işi (Stopped) arka planda çalışmaya devam ettirir. İş numarası belirtilmezse son durdurulan iş (+ ile işaretli) devam eder.

    cezmi@ubuntu:~$ bg %1
    [1]+ sleep 300 & # Arka planda çalışmaya devam ediyor

Arka Plan İşlemlerini Yönetme (jobs, fg)

  • jobs: Mevcut kabuk oturumunda arka planda çalışan (Running) veya durdurulmuş (Stopped) işleri listeler. İş numaralarını ([1], [2]…) gösterir.

    cezmi@ubuntu:~$ jobs
    [1]-  Running                 ./hesaplama.sh &
    [2]+  Stopped                 vim buyuk_dosya.txt

    (+: son kullanılan iş, -: bir önceki)

  • fg %[iş_numarası]: Belirtilen işi (veya + ile işaretli son işi) tekrar ön plana alır. Kontrol tekrar o sürece geçer.

    fg %1  # 1 numaralı işi (hesaplama.sh) ön plana al
    fg     # Son kullanılan işi (vim) ön plana al

nohup - Oturum Kapansa Bile Çalıştırma

  • nohup (“no hang up”), komutun SIGHUP sinyalini (genellikle terminal kapatıldığında gönderilir) yok saymasını sağlar.
  • Uzun süren işlemleri & ile arka plana atıp terminali kapatsanız bile çalışmaya devam etmesini sağlar.
# Betiği başlat, çıktıyı log dosyasına yaz, hataları da aynı dosyaya yaz, arka plana at
nohup ./uzun_suren_betik.sh > betik.log 2>&1 &
  • Çıktı yönlendirilmezse, çıktılar bulunduğunuz dizinde nohup.out dosyasına yazılır.

xkill - Grafik Arayüzden Program Kapatma

  • Yanıt vermeyen (donmuş) bir grafiksel uygulamayı fare ile tıklayarak zorla kapatmayı sağlar.

Kullanım:

  1. Bir terminal açın ve xkill yazıp Enter’a basın.
  2. Fare imleciniz bir “X” veya kafatası işaretine dönüşür.
  3. Bu imleçle kapatmak istediğiniz donmuş uygulama penceresine tıklayın.
  4. Tıklanan uygulama anında kapanır (SIGKILL benzeri etki).
  • Vazgeçmek için xkill aktifken fareye sağ tıklayın veya terminalde Ctrl+C yapın.

systemd ile Servis/Süreç Yönetimi

Ubuntu 24.04 gibi modern sistemlerde, birçok arka plan hizmeti (daemon) systemd tarafından yönetilir. Bu süreçleri systemctl ile kontrol etmek daha güvenli ve standart bir yöntemdir:

  • systemctl status <servis_adı.service>: Servis durumunu kontrol et.
  • sudo systemctl stop <servis_adı.service>: Servisi durdur.
  • sudo systemctl start <servis_adı.service>: Servisi başlat.
  • sudo systemctl restart <servis_adı.service>: Servisi yeniden başlat.
  • sudo systemctl reload <servis_adı.service>: Servisin yapılandırmasını yeniden yükle (destekliyorsa, SIGHUP).
  • sudo systemctl enable <servis_adı.service>: Servisi sistem açılışında otomatik başlat.
  • sudo systemctl disable <servis_adı.service>: Otomatik başlatmayı devre dışı bırak.

Program Çıkış Kodları (Exit Status)

  • Bir komut veya program sonlandığında, işletim sistemine 0-255 arası bir çıkış kodu bildirir.

  • Bu kod, işlemin başarılı olup olmadığını gösterir.

  • 0: Başarılı tamamlanma.

  • 1-255: Hata oluştuğunu gösterir (hata türü programa bağlıdır).

  • Bash kabuğunda, en son çalıştırılan komutun çıkış kodu özel $? değişkeninde saklanır.

ls /etc/passwd > /dev/null # Komutu çalıştır, çıktıyı gösterme
echo $? # Çıkış kodunu göster
# Çıktı: 0 (Başarılı)

ls /etc/yok_boyle_dosya > /dev/null 2>&1 # Hata çıktısını da gizle
echo $? # Çıkış kodunu göster
# Çıktı: 2 (Hata - Dosya yok)

# Betiklerde kontrol:
if cp dosya1.txt yedek/; then
  echo "Kopyalama başarılı."
else
  echo "Kopyalama başarısız! Çıkış kodu: $?"
fi

Özet: Sık Kullanılan Süreç Komutları

Komut Açıklama
ps Anlık süreçleri listeler (aux, -ef, -f)
pstree Süreçleri hiyerarşik ağaç yapısında gösterir
top Dinamik, gerçek zamanlı süreç izleme (metin)
htop Gelişmiş, renkli, etkileşimli süreç izleme
pgrep Desene göre süreçlerin PID’lerini bulur
pidof Tam komut adına göre PID bulur
kill Belirtilen PID’lere sinyal gönderir (varsayılan SIGTERM)
pkill Desene uyan süreçlere sinyal gönderir (varsayılan SIGTERM)
killall Komut adına uyan tüm süreçlere sinyal gönderir (dikkat!)
& (sona) Komutu arka planda başlatır
jobs Arka plan/durdurulmuş işleri listeler
fg Arka plan/durdurulmuş işi ön plana alır
bg Durdurulmuş işi arka planda devam ettirir
Ctrl+Z Ön plandaki süreci durdurur (SIGTSTP)
nohup Komutun SIGHUP sinyalini yoksaymasını sağlar
nice Süreci belirli bir öncelikle başlatır
renice Çalışan bir sürecin önceliğini değiştirir
xkill Grafiksel arayüzden donmuş uygulamayı kapatır
systemctl systemd servislerini/süreçlerini kontrol eder
$? Son komutun çıkış kodunu tutan değişken