⚙️ Süreçler & Servisler

Süreçler & Servisler: Linux'ta çalışan her program bir process'tir — kendi PID'i (process ID), bellek alanı, dosya descriptor'ları ve signal handler'larıyla izole bir birimdir —

Linux'ta çalışan her program bir process'tir — kendi PID'i (process ID), bellek alanı, dosya descriptor'ları ve signal handler'larıyla izole bir birimdir — ve OS zamanlayıcısı her birine sırayla CPU zamanı verir, tıpkı Java'nın JVM'inin thread'leri zamanlaması gibi. Ama şu soruyu sor: bir process düzgün çalışıyorsa `ps`, `kill` veya `systemctl` neden gerekli olsun ki? Çünkü QA otomasyonunda process'ler takılır. Test suite'i bittikten sonra durması gereken Selenium Grid hub, port 4444'ü dinlemeye devam eder ve bir sonraki pipeline çalıştırmasını bloke eder. İşlenmemiş bir exception yakalayan pytest oturumu bellekte yer tüketen bir zombie process bırakır. `nohup` ile arka plana alınan mock server test bittikten iki saat sonra hâlâ çalışıyordur ve disk artık %98 dolup loglarıyla taşmaktadır. Java'daki benzetimle: Linux process'lerini yönetmek, `Thread` yaşam döngüsünü yönetmek gibidir — `isAlive()` (`ps aux | grep`), `interrupt()` (`kill SIGTERM`) ve bazen `stop()` (`kill -9 SIGKILL`) gerekir; `SIGTERM`'ın her zaman önce denenmesi gerektiğini bilmek önemlidir çünkü process kaynaklarını temizleyip açık dosyaları kapatmasına izin verir, `SIGKILL` ise tüm temizliği atlar ve geride bozulmuş geçici dosyalar veya kilitli port'lar bırakabilir.

Process'leri Görüntülemek & Kontrol Etmek

Takılı bir process'i bulup durdurmak

🎬 Sinyal Merdiveni: SIGTERM'den SIGKILL'e

selenium-node (PID 4821)

Kilitli port / yarım dosya

Suite bitti ama sonraki pipeline koşumu başlayamıyor: port 4444 hâlâ MEŞGUL. Bir şey ölmesi gerektiği halde yaşıyor.

`ps aux | grep selenium` suçluyu bulur: PID 4821, CPU %98.7 — testler bittiği halde kapanmayı unutmuş bir selenium-node.

Merdivenin İLK basamağı: `kill 4821` — SIGTERM gönderir: "lütfen kapan". Process bu sinyali YAKALAYABİLİR: açık dosyalarını kapatır, portu bırakır, temp'ini siler — düzgün bir veda.

Tekrar kontrol: `ps aux | grep selenium` — hâlâ listede. Process SIGTERM'i yok saydı (ya da sonsuz döngüde sıkışıp sinyali işleyemiyor). Nazik istek işe yaramadı.

Merdivenin SON basamağı: `kill -9 4821` — SIGKILL. Bu sinyal process'e hiç ULAŞMAZ; kernel process'i doğrudan yok eder. Anında ölüm, sıfır temizlik şansı.

Kontrast — SIGKILL'in bedeli: yarım yazılmış temp dosyası, bırakılmamış lock, hâlâ "meşgul" görünen port kalabilir. Merdivenin sırası bu yüzden vardır: önce TERM (temizlik şansı), ancak yanıt yoksa KILL.

Final — kanıt: `ps aux | grep selenium` artık BOŞ döner; port 4444 serbest, sıradaki koşum başlayabilir. Java köprüsü: SIGTERM ≈ `Thread.interrupt()` (kibarca durmasını iste), SIGKILL ≈ deprecated `Thread.stop()` — zorla durdurmanın deprecated OLMA sebebi, tam da bu temizlik sorunlarıdır.

Micro Lab: ps & kill