Açık Kaynak İşletim Sistemleri

8 - Süreçler

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2026

Süreç (Process) Nedir?

Süreç (Process): İşletim sistemi tarafından çalıştırılmak üzere oluşturulan bir program örneğidir.

Bir süreç:

  • kendine ait bir PID numarasına sahiptir,
  • bellekte kendisine ayrılmış alanları kullanır,
  • açık dosya tanıtıcıları gibi işletim sistemi kaynaklarına sahip olabilir,
  • o anda CPU’da çalışıyor, çalışmak için bekliyor, uyuyor veya durdurulmuş olabilir.

Program ve Süreç Farkı

Program, disk üzerinde bulunan çalıştırılabilir kod ve verilerden oluşan pasif bir dosyadır.

Örnek:

/usr/bin/bash
/bin/ls
/usr/bin/python3

Süreç ise bu programlardan birinin işletim sistemi tarafından çalıştırılmasıyla oluşan aktif çalışma örneğidir.

Aynı programdan aynı anda birden fazla süreç oluşturulabilir.

Program ve Süreç Örneği

Aynı program birden fazla kez çalıştırılırsa, her çalışma için ayrı bir süreç oluşur.

sleep 300 &
sleep 300 &
sleep 300 &

Bu komutlardan sonra aynı sleep programına ait üç farklı süreç oluşur.

pgrep -a sleep

Her sürecin PID değeri farklıdır.

Süreç İçeriği

Bir süreç yalnızca çalıştırılan koddan oluşmaz. İşletim sistemi süreç için çeşitli bilgiler ve kaynaklar tutar.

  • 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.
  • Dinamik Bellek Alanı (Heap): Program çalışırken dinamik olarak ayrılan bellek alanı.
  • Yığın (Stack): Fonksiyon çağrıları, yerel değişkenler ve dönüş adresleri.
  • İşlemci Bağlamı: Program sayacı, işlemci yazmaçları ve çalışma durumu.
  • Açık Dosya Tanıtıcıları: Dosyalar, soketler ve benzeri kaynaklar.
  • Diğer Bilgiler: PID, PPID, kullanıcı, öncelik ve süreç durumu.

PID ve PPID Numaraları

  • PID (Process ID): Her sürece ait benzersiz süreç numarasıdır.
  • PPID (Parent Process ID): Süreci başlatan ebeveyn sürecin PID numarasıdır.
  • Süreçler bu ilişki üzerinden hiyerarşik bir ağaç yapısı oluşturur.
  • Bu yapı pstree komutu ile görülebilir.

Ubuntu 24.04 gibi systemd kullanan modern Linux dağıtımlarında ilk kullanıcı alanı süreci genellikle systemd sürecidir.

ps -p 1 -f

Bu süreç çoğunlukla PID 1 değerine sahiptir.

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

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

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

ps, çalışan süreçleri listelemek için kullanılır.

Parametresiz ps, yalnızca 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

Bu örnekte mevcut terminal oturumunda çalışan bash ve ps süreçleri görülmektedir.

ps - Detaylı Bilgi ve PPID

-f seçeneği daha ayrıntılı çıktı üretir.

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

Bu çıktıda:

  • PID: Sürecin kendi numarasıdır.
  • PPID: Süreci başlatan ebeveyn sürecin numarasıdır.
  • CMD: Çalıştırılan komutu gösterir.

Örnekte ps -f sürecinin ebeveyni bash sürecidir.

ps aux ve ps -ef

Sistemdeki tüm süreçleri görmek için iki yaygın kullanım vardır.

BSD sözdizimi:

ps aux | head

System V sözdizimi:

ps -ef | head

Bu iki kullanım benzer amaçla kullanılır; ancak çıktı biçimleri farklıdır.

ps aux çıktısında sık görülen sütunlar:

  • USER: Sürecin sahibi.
  • PID: Süreç numarası.
  • %CPU: CPU kullanımı.
  • %MEM: Bellek kullanımı.
  • STAT: Süreç durumu.
  • COMMAND: Çalıştırılan komut.

ps - Sadece İstenen Sütunları Gösterme

ps -o seçeneği ile çıktıda hangi sütunların yer alacağı belirlenebilir.

ps -o pid,ppid,stat,%cpu,%mem,cmd -p 1

Bu komut, PID değeri 1 olan süreci seçilen sütunlarla gösterir.

Bu kullanım:

  • gereksiz sütunları azaltır,
  • süreç ilişkilerini daha okunabilir hale getirir,
  • betiklerde veya sistem incelemesinde yararlıdır.

ps - Seçme, Sıralama ve Filtreleme

Belirli bir kullanıcının süreçlerini listelemek için:

ps -u cezmi

Belirli bir PID değerini incelemek için:

ps -p 1969 -f

CPU kullanımına göre sıralamak için:

ps aux --sort=-%cpu | head

Bellek kullanımına göre sıralamak için:

ps aux --sort=-%mem | head

- işareti azalan sıralama anlamına gelir.

ps ve grep ile Filtreleme

ps çıktısı grep ile filtrelenebilir.

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

Burada grep komutunun kendisi de sonuçlarda görülebilir.

Bu nedenle PID bulmak için çoğu zaman pgrep daha temiz bir çözümdür.

pstree - Süreç Ağacı

pstree, süreçleri ebeveyn-çocuk ilişkisine göre hiyerarşik biçimde gösterir.

Yaygın seçenekler:

  • -p: PID değerlerini de gösterir.
  • -a: Komut satırı argümanlarını da gösterir.
cezmi@ubuntu:~$ pstree -p | head -n 10
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)

/proc Üzerinden Süreç Bilgisi

Linux’ta süreç bilgileri /proc sanal dosya sistemi üzerinden de incelenebilir.

ls /proc/1
cat /proc/1/status
cat /proc/$$/status

Bazı önemli yollar:

  • /proc/<PID>/status: Sürecin temel durum bilgilerini gösterir.
  • /proc/<PID>/cmdline: Sürecin hangi komutla başlatıldığını gösterir.
  • /proc/<PID>/fd: Sürecin açık dosya tanıtıcılarını gösterir.
  • $$: Mevcut kabuğun PID değeridir.

ps, top ve benzeri araçlar süreç bilgilerini büyük ölçüde bu yapı üzerinden okuyabilir.

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

top, sistem kaynak kullanımını anlık olarak gösteren etkileşimli bir araçtır.

Genellikle şu bilgileri görmek için kullanılır:

  • CPU kullanımı.
  • Bellek kullanımı.
  • Süreç sayısı.
  • Süreç durumları.
  • En çok kaynak tüketen süreçler.

Etkileşimli kısayollar:

  • k: Sürece sinyal gönderme.
  • r: Sürecin nice değerini değiştirme.
  • h: Yardım.
  • q: Çıkış.

top Komutunun Örnek Çıktısı

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 Çıktısı - Özet Alanı

top çıktısının üst kısmı sistemin genel durumunu gösterir.

  • top satırı: Saat, çalışma süresi, kullanıcı sayısı ve yük ortalamaları.
  • Tasks: Toplam süreç sayısı ve durumlarına göre dağılım.
  • %Cpu(s): CPU kullanımının dağılımı.
  • MiB Mem: Fiziksel bellek kullanımı.
  • MiB Swap: Takas alanı kullanımı.

Örneğin:

  • running: Çalışan veya çalışmaya hazır süreç sayısı.
  • sleeping: Bir olay bekleyen süreç sayısı.
  • zombie: Sonlanmış fakat ebeveyni tarafından henüz toplanmamış süreç sayısı.

Load Average Ne Anlama Gelir?

load average, CPU kullanım yüzdesi değildir.

Bu değer, çalışmaya hazır olan veya kesilemeyen G/Ç beklemesinde bulunan süreçlerin ortalama sayısını gösterir.

load average: 0.15, 0.10, 0.11

Bu üç değer sırasıyla:

  • son 1 dakikalık,
  • son 5 dakikalık,
  • son 15 dakikalık

ortalama sistem yükünü gösterir.

Tek çekirdekli bir sistemde 1.00 yoğun bir sistemi gösterebilir. Dört çekirdekli bir sistemde ise 1.00 genellikle sorunlu değildir.

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

Süreç listesindeki yaygın sütunlar:

  • PID: Süreç numarası.
  • USER: Süreç sahibi kullanıcı.
  • PR: Çekirdeğin kullandığı öncelik değeri.
  • NI: Nice değeri.
  • VIRT: Sanal bellek boyutu.
  • RES: Fiziksel bellekte tutulan alan.
  • SHR: Paylaşılan bellek alanı.
  • S: Süreç durumu.
  • %CPU: CPU kullanım yüzdesi.
  • %MEM: Bellek kullanım yüzdesi.
  • TIME+: Toplam CPU kullanım süresi.
  • COMMAND: Çalıştırılan komut.

Süreç Durumları (STAT / S)

ps, top ve htop çıktılarında süreç durumu genellikle STAT veya S sütununda gösterilir.

  • RRunning / Runnable: Çalışıyor veya CPU sırası bekliyor.
  • SInterruptible Sleep: Bir olay bekliyor; sinyalle kesilebilir.
  • DUninterruptible Sleep: Genellikle G/Ç bekler; sinyalle kolayca kesilemez.
  • ZZombie: Süreç sonlanmış, fakat ebeveyni çıkış durumunu okumamıştır.
  • TStopped: Sinyal ile durdurulmuştur.
  • IIdle: Genellikle çekirdek iş parçacıkları için görülür.

En sık görülen durum çoğunlukla S durumudur.

Zombie ve Orphan Süreçler

Zombie süreç: Sonlanmış fakat ebeveyn süreci tarafından çıkış durumu henüz okunmamış süreçtir.

ps çıktısında bazen <defunct> olarak görülebilir.

Çok sayıda zombie süreç, ebeveyn süreçte bir sorun olduğuna işaret edebilir.

Orphan süreç: Ebeveyni sonlanan fakat kendisi çalışmaya devam eden süreçtir.

Bu tür süreçler genellikle PID 1 tarafından sahiplenilir. systemd, bu süreçler sonlandığında çıkış durumlarını okuyarak zombie olarak kalmalarını engeller.

Süreç Önceliği: Priority ve Niceness

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

  • Priority (PR): Çekirdeğin dinamik olarak hesapladığı öncelik değeridir.
  • Niceness (NI): Kullanıcının sürecin önceliğine etki etmek için verdiği ipucudur.

Nice değeri aralığı:

  • -20: En yüksek öncelik.
  • 0: Varsayılan değer.
  • +19: En düşük öncelik.

Düşük NI değerine sahip süreçler CPU üzerinde daha yüksek öncelik elde edebilir.

nice ve renice

Bir komutu belirli nice değeriyle başlatmak için:

nice -n 10 uzun_islem.sh

Çalışan bir sürecin nice değerini değiştirmek için:

renice 10 -p 1234

Daha yüksek öncelik vermek için negatif nice değeri gerekir. Bu işlem genellikle yönetici yetkisi ister.

sudo renice -5 -p 1234

nice ve renice, özellikle CPU yoğun işlemlerin sistem üzerindeki etkisini azaltmak için kullanılır.

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

htop, top komutuna göre daha görsel ve etkileşimli bir süreç izleme aracıdır.

Kurulum:

sudo apt update
sudo apt install htop

htop ile:

  • süreçler arasında gezilebilir,
  • CPU ve bellek kullanımı daha rahat izlenebilir,
  • süreç ağacı görüntülenebilir,
  • süreçlere sinyal gönderilebilir,
  • nice değeri değiştirilebilir.

top ve htop Karşılaştırması

Özellik top htop
Varsayılan kurulum Genellikle vardır Genellikle ayrıca kurulur
Görünüm Metin tabanlı Daha görsel
Kaydırma Sınırlı Dikey ve yatay
Fare desteği Yok veya sınırlı Var
Süreç öldürme k F9
Nice değiştirme r F7 / F8
Ağaç görünümü Yok F5 veya t

PID Bulma: pgrep ve pidof

Süreçleri adlarına veya komut satırı içeriklerine göre bulmak için pgrep ve pidof kullanılabilir.

pgrep, ada göre süreç arar.

pgrep firefox
pgrep -u cezmi bash

Komut satırının tamamında arama yapmak için -f kullanılabilir.

pgrep -f script.py

pidof, belirli bir komut adına ait süreçlerin PID değerlerini listeler.

pidof bash
pidof sshd

pgrep -a, PID ile birlikte komut satırını da gösterir.

pgrep -a firefox

Sinyaller (Signals)

Sinyaller, süreçlere gönderilen basit kontrol ve bildirim mekanizmalarıdır.

Bir sinyal:

  • süreci sonlandırabilir,
  • süreci durdurabilir,
  • durdurulmuş süreci devam ettirebilir,
  • bazı programlarda yapılandırmanın yeniden okunmasını sağlayabilir.

Sinyaller kullanıcıdan, başka bir süreçten veya işletim sisteminden gelebilir.

Örneğin Ctrl+C, çalışan sürece SIGINT sinyali gönderir.

Sık Kullanılan Sinyaller

Sinyal No Anlamı Örnek
SIGHUP 1 Terminal bağlantısı kesildi / yapılandırmayı yeniden oku kill -1
SIGINT 2 Kesme isteği Ctrl+C
SIGQUIT 3 Çıkış isteği Ctrl+\
SIGKILL 9 Koşulsuz sonlandırma kill -9
SIGTERM 15 Normal sonlandırma isteği kill
SIGSTOP 19 Koşulsuz durdurma kill -19
SIGTSTP 20 Terminalden durdurma Ctrl+Z
SIGCONT 18 Devam ettirme fg, bg, kill -18

SIGKILL ve SIGSTOP süreç tarafından yakalanamaz veya yok sayılamaz.

Süreçlere Sinyal Gönderme: kill

kill, belirtilen PID değerine sahip sürece sinyal gönderir.

Varsayılan sinyal SIGTERM sinyalidir.

kill 1234

Bu komut, sürece normal şekilde sonlanması için istek gönderir.

Belirli bir sinyal göndermek için:

kill -15 1234
kill -TERM 1234

Zorla sonlandırma için:

kill -9 1234
kill -KILL 1234

kill -9, sürece düzgün kapanma fırsatı vermez. Bu nedenle ilk tercih olarak kullanılmamalıdır.

pkill ve killall

pkill, süreçleri ada veya desene göre bulur ve sinyal gönderir.

pkill firefox
pkill -9 -u guest gedit

killall, belirtilen komut adına sahip süreçlere sinyal gönderir.

killall gedit

Dikkat edilmesi gereken nokta:

  • pkill, desen eşleştirme yaptığı için beklenenden fazla süreci etkileyebilir.
  • killall, aynı ada sahip tüm süreçleri etkileyebilir.
  • Önce pgrep -a ile hangi süreçlerin eşleştiğini görmek daha güvenlidir.
pgrep -a firefox

Süreç Sonlandırmada Önerilen Sıra

Bir süreci kapatırken doğrudan kill -9 kullanmak yerine şu sıra tercih edilir:

  1. Süreci tespit et:
pgrep -a firefox
  1. Normal sonlandırma isteği gönder:
kill <PID>
  1. Kısa süre bekle:
sleep 5
  1. Kapanıp kapanmadığını kontrol et:
ps -p <PID>
  1. Hâlâ kapanmadıysa son çare olarak zorla sonlandır:
kill -9 <PID>

kill -9 Neden Son Çare Olmalı?

SIGKILL, süreci anında sonlandırır. Süreç bu sinyali yakalayamaz, erteleyemez veya yok sayamaz.

Bu nedenle program bazı işlemleri tamamlayamadan kapanabilir:

  • geçici dosyalar silinmeden kalabilir,
  • kilit dosyaları temizlenmeyebilir,
  • açık dosyalara yazma işlemi yarım kalabilir,
  • veritabanı işlemleri düzgün tamamlanmayabilir,
  • ağ bağlantıları normal şekilde kapatılamayabilir.

Bu yüzden önce SIGTERM ile normal kapanma istenir. SIGKILL, süreç yanıt vermediğinde son seçenek olarak kullanılır.

Arka Planda Süreç Başlatma: &

Bir komutun sonuna & eklenirse komut arka planda başlatılır.

sleep 300 &
[1] 5120

Kabuk iki bilgi verir:

  • [1]: İş numarasıdır.
  • 5120: Sürecin PID değeridir.

Komut arka planda çalışırken terminal başka komutlar için kullanılabilir.

Daha Güvenli Bir Arka Plan Örneği

Uzun sürebilecek bir arama işlemi arka planda başlatılabilir.

find ~/Downloads -name "*.tmp" -print &
[1] 5142

Bu örnekte yalnızca dosyalar listelenir; silme işlemi yapılmaz.

Arka plan süreçlerini incelerken riskli komutlardan kaçınmak daha güvenlidir.

Süreci Durdurma: Ctrl+Z

Ön planda çalışan bir süreç Ctrl+Z ile durdurulabilir.

Bu işlem süreci sonlandırmaz; yalnızca beklemeye alır.

cezmi@ubuntu:~$ sleep 300
^Z
[1]+  Stopped                 sleep 300

Bu durumda süreç Stopped durumundadır.

Terminal tekrar komut almaya başlar.

Arka Planda Devam Ettirme: bg

Durdurulmuş bir işi arka planda devam ettirmek için bg kullanılır.

cezmi@ubuntu:~$ bg %1
[1]+ sleep 300 &

İş numarası belirtilmezse genellikle son durdurulan iş devam ettirilir.

bg

Bu işlem, sürece SIGCONT sinyali gönderir.

Arka Plan İşlerini Görme: jobs

jobs, mevcut kabuk oturumundaki arka plan ve durdurulmuş işleri listeler.

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

İşaretlerin anlamı:

  • +: Son kullanılan iş.
  • -: Bir önceki iş.

jobs, yalnızca mevcut kabuk oturumunun işlerini gösterir. Sistemdeki tüm süreçleri göstermez.

İşi Ön Plana Alma: fg

fg, arka plandaki veya durdurulmuş bir işi tekrar ön plana alır.

fg %1

İş numarası verilmezse + ile işaretli son iş ön plana alınır.

fg

Ön plana alınan süreç terminal kontrolünü tekrar devralır.

Örneğin ön plana alınan bir vim sürecinde klavye girişi yeniden programa gider.

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

nohup, komutun SIGHUP sinyalini yok saymasını sağlar.

Bu yöntem, uzun süren işlemlerin terminal kapansa bile çalışmaya devam etmesi için kullanılabilir.

nohup ./uzun_suren_betik.sh > betik.log 2>&1 &

Bu komutta:

  • nohup: Terminal kapanınca gelen SIGHUP sinyalini yok saydırır.
  • > betik.log: Standart çıktıyı dosyaya yazar.
  • 2>&1: Hata çıktısını da aynı dosyaya yönlendirir.
  • &: Komutu arka planda başlatır.

Çıktı yönlendirilmezse, çıktı genellikle nohup.out dosyasına yazılır.

Grafik Uygulamalar İçin Kısa Not

Grafik arayüzde yanıt vermeyen bir uygulama olduğunda önce masaüstü ortamının kendi kapatma araçları tercih edilebilir.

Komut satırından işlem yapılacaksa uygulama adına göre süreç bulunup kapatılabilir.

pgrep -a gedit
pkill gedit

Eski X11 oturumlarında xkill aracı da görülebilir.

xkill

Ancak Wayland tabanlı modern masaüstü oturumlarında xkill her zaman beklenen şekilde çalışmayabilir. Bu nedenle temel süreç yönetimi için pgrep, pkill, kill ve sistem izleme araçlarını bilmek daha önemlidir.

Servis ve systemd Nedir?

Linux sistemlerinde bazı programlar kullanıcı doğrudan başlatmasa da arka planda sürekli veya gerektiğinde çalışır.

Bu tür arka plan hizmetlerine genellikle servis denir.

Örnekler:

  • ssh.service: SSH bağlantılarını kabul eder.
  • NetworkManager.service: Ağ bağlantılarını yönetir.
  • cron.service: Zamanlanmış görevleri çalıştırır.
  • apache2.service veya nginx.service: Web sunucusu hizmeti verir.

Ubuntu 24.04 gibi modern Linux dağıtımlarında bu servislerin önemli bir bölümü systemd tarafından yönetilir.

systemd Ne Yapar?

systemd, Linux sistemlerinde servisleri ve sistem açılış sürecini yöneten temel bileşenlerden biridir.

Genel olarak:

  • sistem açılırken gerekli servisleri başlatır,
  • servislerin durumunu takip eder,
  • servisleri durdurma, yeniden başlatma ve etkinleştirme işlemlerini yönetir,
  • servislerin bağımlılık ilişkilerini dikkate alır,
  • servis günlüklerinin incelenmesini kolaylaştıran altyapıyla birlikte çalışır.

Bu nedenle servis yönetiminde çoğu zaman systemctl ve journalctl komutları birlikte kullanılır.

systemctl ile Servis Yönetimi

systemd tarafından yönetilen servisler systemctl komutu ile kontrol edilir.

Bir servisin durumunu görmek için:

systemctl status ssh.service

Yaygın servis işlemleri:

sudo systemctl start ssh.service
sudo systemctl stop ssh.service
sudo systemctl restart ssh.service
sudo systemctl reload ssh.service

Anlamları:

  • start: Servisi başlatır.
  • stop: Servisi durdurur.
  • restart: Servisi durdurup yeniden başlatır.
  • reload: Destekleniyorsa yapılandırmayı yeniden okutur.

start ve enable Farkı

start, servisi şu anda başlatır.

sudo systemctl start ssh.service

enable, servisin sistem açılışında otomatik başlamasını sağlar.

sudo systemctl enable ssh.service

Bu iki işlem aynı şey değildir.

Bir servisi hem hemen başlatmak hem de sonraki sistem açılışlarında otomatik çalıştırmak için şu komut kullanılabilir:

sudo systemctl enable --now ssh.service

disable ve stop Farkı

stop, çalışan servisi şu anda durdurur.

sudo systemctl stop ssh.service

disable, servisin sistem açılışında otomatik başlamasını engeller.

sudo systemctl disable ssh.service

Bu iki işlem de aynı şey değildir.

Bir servis şu anda çalışıyor olabilir ama açılışta otomatik başlamayacak şekilde ayarlanmış olabilir.

Benzer şekilde, bir servis açılışta otomatik başlayacak şekilde etkinleştirilmiş olabilir ama o anda çalışmıyor olabilir.

restart ve reload Farkı

restart, servisi tamamen durdurup yeniden başlatır.

sudo systemctl restart ssh.service

Bu işlem sırasında servis kısa süreliğine kesilebilir.

reload, servis destekliyorsa yapılandırma dosyalarını yeniden okutur.

sudo systemctl reload ssh.service

reload sırasında servis genellikle çalışmaya devam eder. Ancak her servis reload desteklemez.

Genel kullanım:

  • Yapılandırma değiştiyse ve servis reload destekliyorsa önce reload denenir.
  • Servis yeni yapılandırmayı alamıyorsa veya sorun devam ediyorsa restart kullanılır.

Servis Durumunu İnceleme

Bir servisin çalışıp çalışmadığını görmek için:

systemctl status ssh.service

Servisin yalnızca aktif olup olmadığını kontrol etmek için:

systemctl is-active ssh.service

Servisin sistem açılışında otomatik başlayıp başlamadığını görmek için:

systemctl is-enabled ssh.service

Bu komutlar özellikle servis sorunlarını incelerken birlikte kullanılabilir.

journalctl ile Servis Günlüklerini İnceleme

Bir servis çalışmadığında yalnızca systemctl status çıktısı yeterli olmayabilir.

Servis günlüklerini görmek için journalctl kullanılır.

journalctl -u ssh.service

Günlükleri canlı takip etmek için:

journalctl -u ssh.service -f

Son açılıştan sonraki kayıtları görmek için:

journalctl -b -u ssh.service

Bu komutlar, servislerin neden başlamadığını veya neden hata verdiğini anlamak için kullanılır.

Servis Yönetiminde Örnek İnceleme Akışı

Bir servis beklenen şekilde çalışmıyorsa şu sıra izlenebilir:

  1. Servisin durumunu kontrol et:
systemctl status ssh.service
  1. Servisin aktif olup olmadığını kontrol et:
systemctl is-active ssh.service
  1. Servis günlüklerini incele:
journalctl -u ssh.service -b
  1. Yapılandırma değiştiyse önce reload dene:
sudo systemctl reload ssh.service
  1. Sorun devam ederse servisi yeniden başlat:
sudo systemctl restart ssh.service

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

Bir komut veya program sonlandığında işletim sistemine bir çıkış kodu bildirir.

Çıkış kodları genellikle 0 ile 255 arasındadır.

  • 0: Başarılı tamamlanma.
  • 1-255: Hata veya özel durum.

Bash kabuğunda son çalıştırılan komutun çıkış kodu $? değişkeninde tutulur.

ls /etc/passwd > /dev/null
echo $?

Çıktı:

0

Çıkış Kodu Örneği

Var olmayan bir dosya sorgulanırsa komut hata ile sonlanır.

ls /etc/yok_boyle_dosya > /dev/null 2>&1
echo $?

Örnek çıktı:

2

Betiklerde çıkış kodu kontrol edilebilir.

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

Çıkış kodları, kabuk betiklerinde karar vermek için temel mekanizmalardan biridir.

İleri Araçlar: lsof ve strace

Süreçlerle ilgili daha ayrıntılı incelemelerde farklı araçlar da kullanılır.

lsof, süreçlerin açtığı dosyaları, soketleri ve benzeri kaynakları gösterebilir.

lsof -p <PID>

strace, bir sürecin yaptığı sistem çağrılarını izlemek için kullanılır.

strace -p <PID>

Bu araçlar bu dersin temel kapsamı dışında kalır; ancak hata ayıklama ve sistem inceleme sırasında sık kullanılır.

Hangi Durumda Hangi Komut?

Durum Kullanılabilecek Komut
Çalışan süreçleri görmek ps, top, htop
Süreç ağacını görmek pstree
Bir sürecin PID değerini bulmak pgrep, pidof, ps aux \| grep
Belirli bir PID değerini incelemek ps -p <PID> -f
En çok CPU kullanan süreçleri bulmak ps aux --sort=-%cpu, top
En çok bellek kullanan süreçleri bulmak ps aux --sort=-%mem, top
Süreç bilgilerini dosya sistemi üzerinden görmek /proc/<PID>
Açık dosyaları incelemek lsof -p <PID>
Sistem çağrılarını izlemek strace -p <PID>

Hangi Durumda Hangi Komut?

Durum Kullanılabilecek Komut
Süreci normal kapatmak kill <PID>
Ada göre süreç kapatmak pkill, killall
Yanıt vermeyen süreci son çare olarak kapatmak kill -9 <PID>
Ön plandaki işi durdurmak Ctrl+Z
Durdurulan işi arka planda sürdürmek bg
Arka plan işlerini görmek jobs
Arka plandaki işi ön plana almak fg
Terminal kapansa bile çalıştırmak nohup komut &

Hangi Durumda Hangi Komut?

Durum Kullanılabilecek Komut
Servis durumunu görmek systemctl status <servis>
Servisi hemen başlatmak systemctl start <servis>
Servisi hemen durdurmak systemctl stop <servis>
Servisi açılışta otomatik başlatmak systemctl enable <servis>
Otomatik başlatmayı kapatmak systemctl disable <servis>
Yapılandırmayı yeniden okutmak systemctl reload <servis>
Servisi yeniden başlatmak systemctl restart <servis>
Servis günlüklerini incelemek journalctl -u <servis>

Kapanış

Bu derste süreçlerin yalnızca “çalışan program” olarak düşünülmemesi gerektiğini gördük.

Bir süreci incelerken PID ve PPID ilişkisine, süreç durumuna, CPU ve bellek kullanımına, aldığı sinyallere ve bağlı olduğu kaynaklara bakarız.

Servis tarafında ise aynı süreç mantığı devam eder; ancak servisler sistem tarafından daha düzenli biçimde başlatılır, durdurulur, izlenir ve günlük kayıtlarıyla takip edilir.

Bu nedenle süreç ve servis yönetimi, Linux sistemlerinde sorun giderme ve temel sistem yöneticiliği için birlikte düşünülmesi gereken iki konudur.