00 Süreç nedir
Her çalışan program bir süreçtir. Çekirdek her birine benzersiz bir kimlik atar ve kaynaklarını izler.
PID Process ID — benzersiz sayısal kimlik PPID Parent PID — hangi süreç bu süreci başlattı UID Süreci başlatan kullanıcı (gerçek kimlik) EUID Efektif kullanıcı (SUID bit varsa farklı olabilir) PID 1 → init/systemd (çekirdek başlattı) └── PID 458 → sshd └── PID 1203 → bash (senin oturumun) └── PID 1278 → python server.py
Bir süreç öldüğünde ebeveyn bunu wait() ile onaylayana kadar "zombie" (Z) durumda kalır. Çok sayıda zombie → ebeveyn süreçte sorun var.
Süreç durumları
01 ps — anlık süreç tablosu
ps (process status) sistemdeki süreçlerin anlık görüntüsünü verir.
# En yaygın iki form
ps aux # BSD stili — tüm süreçler, kullanıcı dahil
ps -ef # POSIX stili — full format (PPID dahil)
# Belirli sütunlar
ps -o pid,ppid,user,%cpu,%mem,cmd
# Belirli kullanıcının süreçleri
ps -u ali
# Belirli PID
ps -p 1234
# Ağaç görünümü (ps'e özgü)
ps -ejH
# veya:
pstree -p
# Belirli komut adını tara
ps aux | grep nginx
ps aux çıktısını okumak
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 22528 8192 ? Ss Apr09 0:02 /sbin/init
ali 1278 2.3 1.4 312444 57600 ? Sl 10:23 0:15 python server.py
ali 1290 0.1 0.0 12800 2048 pts/0 S+ 10:24 0:00 bash
02 top — gerçek zamanlı izleme
top periyodik olarak yenilenir ve anlık kaynak kullanımını gösterir.
top # varsayılan, her 3 saniye yeniler
top -u ali # sadece ali'nin süreçleri
top -p 1278,1290 # belirli PID'ler
# Non-interactive batch modu (betik için)
top -b -n 1 | head -30 # tek anlık görüntü
top -b -n 5 -d 2 | grep python # 5 döngü, 2sn aralık
top içinde interaktif komutlar
03 htop — interaktif izleme
htop, top'un daha kullanıcı dostu versiyonu. Kurulu değilse: sudo apt install htop
htop # başlat
htop -u ali # kullanıcı filtresi
htop -p 1278 # belirli PID
Fareyle etkileşim (tıklayarak sırala, seç, sonlandır), renk kodlu CPU/bellek çubukları, ağaç görünümü ve yatay kaydırma (uzun komut satırları). top'un daha güçlü hali.
04 kill — sinyal gönder
kill bir süreci "öldürmez" — sinyal gönderir. Süreç bunu nasıl yorumlar, kendisi karar verir.
Temel kullanım
# SIGTERM (15) — nazik: "lütfen kapat"
kill 1278 # varsayılan sinyal 15
kill -15 1278
kill -TERM 1278
# SIGKILL (9) — zorla: "şimdi öl" (yakalanıp engellenemez)
kill -9 1278
kill -KILL 1278
# SIGHUP (1) — daemon'ları yeniden başlatmak/config yüklemek için
kill -HUP 1278
kill -1 1278
# Tüm sinyaller
kill -l
pkill ve killall
# İsme göre öldür (tüm eşleşenler)
pkill python # "python" içeren tüm süreçler
pkill -9 python
pkill -f 'python server.py' # -f: tam komut satırında ara
# Belirli kullanıcının süreçlerini öldür
pkill -u ali python
# killall: tam isim eşleşmesi (pkill'den farklı)
killall nginx
killall -HUP nginx # nginx'e HUP gönder (config reload)
# pgrep: öldürmeden PID bul
pgrep python
pgrep -la python # PID + komut adı
| Sinyal | Numara | Ne yapar |
|---|---|---|
| SIGTERM | 15 | Nazik sonlandırma isteği. Süreç yakalayıp temizlik yapabilir. İlk tercih. |
| SIGKILL | 9 | Anında sonlandırma. Yakalanıp engel olunamaz. Temizlik olmaz — son çare. |
| SIGHUP | 1 | Terminal kapandı / config yenile. Daemon'larda yeniden başlatma yerine config yüklemek için. |
| SIGINT | 2 | Ctrl+C — interaktif iptal. |
| SIGSTOP | 19 | Durdur (yakalanıp engel olunamaz). Ctrl+Z ile gönderilir. |
| SIGCONT | 18 | Durdurulan süreci devam ettir. |
-9 her zaman ilk tercih olmamalı. SIGKILL'de süreç temizlik yapamaz — açık dosyalar flush edilmez, DB transaction'ları commit olmaz, lock'lar serbest bırakılmaz. Önce kill -15 PID, birkaç saniye bekle, cevap vermiyorsa -9.
05 lsof — açık dosyalar ve portlar
lsof (List Open Files) bir sürecin hangi dosyaları, soketleri, portları açık tuttuğunu gösterir.
# Portu hangi süreç kullanıyor?
lsof -i :8080
lsof -i TCP:80
lsof -i UDP:53
# Belirli PID'nin açık dosyaları
lsof -p 1278
# Belirli kullanıcının açık dosyaları
lsof -u ali
# Belirli dosyayı kim açmış?
lsof /var/log/app.log
# Belirli dizindeki açık dosyalar
lsof +D /var/www/
# Tüm ağ bağlantıları (LISTEN dahil)
lsof -i
# Sadece LISTEN (dinleyen portlar)
lsof -i -s TCP:LISTEN
# Silinen ama hâlâ açık tutulan dosyalar (disk doldu mu diye)
lsof | grep 'deleted'
Bir süreç büyük bir dosyayı sildiniz ama hâlâ açık tutuyorsa, disk alanı geri gelmez. lsof | grep deleted ile bu dosyaları bul ve o süreci yeniden başlat veya sonlandır.
ss -tlnp ve ss -ulnp — netstat'ın modern yerine geçeni. Sadece port/soket bilgisi için lsof'tan hızlı: ss -tlnp | grep :8080.
06 /proc/PID — süreç dosya sistemi
Linux'ta her süreç için /proc altında sanal bir dizin bulunur. Araç kullanmadan doğrudan içine bakabilirsin.
# Komut satırı
cat /proc/1278/cmdline | tr '\0' ' '
# → python server.py
# Ortam değişkenleri
cat /proc/1278/environ | tr '\0' '\n'
# Durum (bellek, durum, signal mask)
cat /proc/1278/status
# Açık dosya descriptor'ları
ls -la /proc/1278/fd/
# 0 → stdin, 1 → stdout, 2 → stderr, 3+ → açık dosyalar
# Ne kadar bellek kullanıyor (detaylı)
cat /proc/1278/smaps | grep '^Rss' | awk '{sum+=$2} END{print sum " kB"}'
# CPU/bellek özeti
cat /proc/1278/stat
# Hangi ağ bağlantıları var
cat /proc/1278/net/tcp
/proc gerçek bir disk dizini değil — kernel'ın bellekten sanal olarak ürettiği bir dosya sistemi. Her okuma gerçek zamanlı bilgi döner. Bu yüzden ps, top, lsof gibi araçlar da /proc'u okur.
07 strace — sistem çağrısı izleme
Bir program ne yapıyor ama neden başarısız oluyor bilmiyorsun? strace her syscall'ı gösterir.
# Komutu çalıştırırken izle
strace ls /tmp
# Sadece belirli syscall'lar (-e)
strace -e trace=open,read,write cat /etc/hosts
strace -e trace=network curl https://example.com
# Çalışan sürece bağlan (-p)
sudo strace -p 1278
# Çıktıyı dosyaya yaz (-o)
strace -o /tmp/strace.log python server.py
# Süre ölç (-T): her syscall ne kadar sürdü
strace -T ls /tmp
# İstatistik (-c): hangi syscall kaç kez, ne kadar sürdü
strace -c ls /tmp
Program "neden bu dosyayı açamıyor?", "neden bu porta bağlanamıyor?", "neden bu kadar yavaş?" sorularında. strace çıktısı gürültülü olabilir — -e ile sadece ilgili syscall'ları filtrele. Üretim ortamında dikkatli kullan: izlenen süreci yavaşlatır.
08 Kaynak limiti — ulimit, nice, ionice
Süreçlerin ne kadar kaynak kullanabileceğini sınırla veya önceliğini ayarla.
ulimit
# Mevcut limitleri göster
ulimit -a
# Açılabilecek maksimum dosya sayısı
ulimit -n # göster
ulimit -n 65536 # ayarla (sadece geçerli shell için)
# Core dump dosyası boyutu
ulimit -c unlimited # crash dump oluşsun
ulimit -c 0 # core dump oluşmasın
# Sistem geneli kalıcı limit (pam_limits)
# /etc/security/limits.conf:
# ali soft nofile 65536
# ali hard nofile 131072
nice ve renice — CPU önceliği
# nice: -20 (yüksek öncelik) … 0 (normal) … 19 (düşük öncelik)
# Düşük öncelikle çalıştır (sistemin yavaşlamaması için)
nice -n 19 gzip büyük_dosya.log
# Yüksek öncelik (root gerekir)
sudo nice -n -10 python kritik_servis.py
# Çalışan sürecin önceliğini değiştir (renice)
renice -n 10 -p 1278 # PID'ye göre
renice -n 19 -u backup # kullanıcıya göre
ionice — disk I/O önceliği
# I/O class: 1=realtime, 2=best-effort, 3=idle
# Idle class: diğer süreçlerin I/O'su bitince çalış
ionice -c3 rsync -av /backup/ /nas/
# Best-effort seviye 7 (düşük, 0-7)
ionice -c2 -n7 find / -name '*.log'
# Çalışan sürece uygula
ionice -c3 -p 1278
09 Pratik senaryolar
Sık karşılaşılan durumlar ve nasıl teşhis edildiği.
Portu kim tutuyor?
lsof -i :8080
# veya:
ss -tlnp | grep ':8080'
# → pid=1278 → kill 1278 ya da kill -9 1278
En çok RAM kim yiyor?
ps aux | sort -k4 -rn | head -10
# %MEM'e göre sıralı
Zombie süreçleri bul ve ebeveynini kontrol et
# Zombie'leri listele
ps aux | grep 'Z'
# PPID'yi bul ve ebeveyni incele
ps -o pid,ppid,stat,cmd | grep 'Z'
# → ebeveyne HUP gönder: kill -HUP PPID
Disk doldu ama silinen dosyayı bulamıyorsun
lsof | grep 'deleted' | sort -k7 -rn | head
# PID kolonundan süreci bul → yeniden başlat
Bir komutun hangi dosyalara eriştiğini izle
strace -e trace=openat -f python app.py 2>&1 | grep '^openat'
Hatırlanacaklar
ps auxanlık tablo,topcanlı,htopinteraktif canlıkill -15 PIDönce, yanıt yok isekill -9 PIDpkill -f 'komut'— tam komut satırında isim ara, tümünü öldürlsof -i :PORT— portu hangi süreç tutuyorlsof | grep deleted— silinmiş ama açık tutulan dosyalar/proc/PID/— araçsız ham süreç bilgisi (fd, cmdline, status)strace -e trace=openat komut— dosya erişimlerini izlenice -n 19 komut— düşük CPU önceliğiionice -c3 komut— idle I/O önceliği (sistemi yormaz)