Linux sistemlerinde süreç yönetimi, sistem yöneticileri ve geliştiriciler için kritik bir beceridir. Peki, sisteminizde hangi programların çalıştığını, ne kadar kaynak tükettiğini veya neden yavaşladığını hiç merak ettiniz mi? İşte tam da bu noktada, Linux’un temel ve güçlü komutlarından biri olan ps devreye giriyor. Bu makalede, ps komutunun derinliklerine inerek, 20 gerçek dünya örneğiyle sistem süreçlerinizi nasıl etkili bir şekilde izleyeceğinizi, yöneteceğinizi ve sorun gidereceğinizi adım adım öğreneceksiniz.
Giriş: Linux Sistemlerinde Süreç Yönetimi Neden Hayati Önem Taşır?
Bir Linux sisteminin kalbi, üzerinde çalışan süreçlerdir. Her uygulama, her servis ve hatta her kullanıcı komutu bir süreç olarak işletim sistemi tarafından yönetilir. Ancak zaman zaman bu süreçler, sistemin yavaşlamasına, donmasına veya beklenmedik davranışlar sergilemesine neden olabilir. Örneğin, bir web sunucusu yanıt vermeyi durdurabilir, bir veritabanı işlemi aşırı bellek tüketebilir veya arka planda çalışan bir betik sonsuz bir döngüye girebilir. Bu tür durumlarla karşılaşıldığında, sorunun kaynağını hızlıca tespit etmek ve müdahale etmek hayati önem taşır. İşte bu noktada, ps (process status) komutu, sistemin anlık süreç durumunu görüntüleyerek size değerli bilgiler sunar. Bu komut sayesinde, hangi sürecin ne kadar CPU kullandığını, ne kadar belleğe ihtiyaç duyduğunu, hangi kullanıcı tarafından çalıştırıldığını ve hatta sürecin mevcut durumunu (çalışıyor, uyuyor, zombi vb.) kolayca görebilirsiniz. Süreç yönetimi sadece sorun gidermekle kalmaz, aynı zamanda sistem kaynaklarını optimize etmek, güvenlik açıklarını tespit etmek ve genel sistem sağlığını korumak için de temel bir araçtır. Bu makale boyunca, ps komutunun çeşitli kullanım senaryolarını keşfedecek, böylece Linux ortamınızda tam kontrol sağlayabileceksiniz.
ps Komutunun Temelleri: Süreç Bilgilerini Anlama ve Okuma
ps komutu, adından da anlaşılacağı gibi, sistemdeki süreçlerin anlık “fotoğrafını” çeker ve çeşitli parametrelerle bu bilgiyi sunar. Bu komutu etkin bir şekilde kullanabilmek için, çıktısının ne anlama geldiğini kavramak önemlidir. Başlangıç olarak, en yaygın kullanılan iki formuna odaklanalım: ps aux ve ps -ef. Bu iki seçenek, genellikle tüm sistem süreçlerini geniş bir formatta listelemek için kullanılır ve çoğu zaman aynı veya benzer bilgileri sunar, ancak argümanları farklı standartlardan (BSD ve System V) gelir.
ps aux
Bu komut, BSD stilini takip eder ve genellikle aşağıdaki sütunları görüntüler:
- USER: Süreci başlatan kullanıcı adı.
- PID: Sürecin benzersiz kimlik numarası (Process ID).
- %CPU: Sürecin kullandığı CPU yüzdesi.
- %MEM: Sürecin kullandığı fiziksel bellek yüzdesi.
- VSZ: Sanal bellek boyutu (kilobayt cinsinden).
- RSS: Gerçek (fiziksel) bellek boyutu (kilobayt cinsinden).
- TTY: Sürecin ilişkili olduğu kontrol terminali (
?ise yok). - STAT: Sürecin mevcut durumu (örneğin, R: çalışıyor, S: uyuyor, Z: zombi).
- START: Sürecin başladığı zaman.
- TIME: Sürecin CPU üzerinde harcadığı toplam süre.
- COMMAND: Süreci başlatan komut ve argümanları.
ps -ef
Bu komut ise System V stilini kullanır ve genellikle aşağıdaki sütunları içerir:
- UID: Süreci başlatan kullanıcının sayısal kimliği.
- PID: Sürecin benzersiz kimlik numarası.
- PPID: Sürecin ebeveyn sürecinin kimlik numarası (Parent Process ID).
- C: CPU kullanım faktörü (BSD’deki %CPU’ya benzer).
- STIME: Sürecin başladığı zaman.
- TTY: Sürecin ilişkili olduğu kontrol terminali.
- TIME: Sürecin CPU üzerinde harcadığı toplam süre.
- CMD: Süreci başlatan komut ve argümanları.
Her iki komut da sisteminizdeki tüm süreçleri listelemek için oldukça kullanışlıdır. Özellikle PID, %CPU, %MEM ve STAT sütunları, bir sürecin davranışını ve sistem üzerindeki etkisini anlamak için kritik öneme sahiptir. Örneğin, yüksek %CPU veya %MEM değerleri, bir sürecin kaynakları aşırı tükettiğini gösterebilirken, STAT sütunundaki ‘Z’ harfi bir zombi süreci işaret edebilir. Bu temel bilgileri anlamak, ps komutunu kullanarak daha karmaşık sorunları gidermenin ilk adımıdır.
Süreçleri Filtreleme ve Özelleştirme: İhtiyacınız Olanı Nasıl Bulursunuz?
Bir Linux sisteminde yüzlerce, hatta binlerce süreç aynı anda çalışabilir. Bu kadar çok bilgi arasında kaybolmadan, aradığınız spesifik süreç bilgilerine ulaşmak için ps komutunun filtreleme ve çıktı özelleştirme yeteneklerini kullanmak kritik öneme sahiptir. Bu bölümde, belirli kriterlere göre süreçleri nasıl filtreleyeceğinizi ve çıktıyı kendi ihtiyaçlarınıza göre nasıl biçimlendireceğinizi öğreneceksiniz.
Belirli Kriterlere Göre Süreçleri Filtreleme
Süreçleri filtrelemenin en yaygın yollarından biri, ps çıktısını grep komutuyla birleştirmektir. Bu sayede, belirli bir anahtar kelimeye veya kalıba uyan süreçleri kolayca bulabilirsiniz.
Örnek 1: Belirli bir kullanıcıya ait süreçleri listeleme.
Diyelim ki sistemdeki nginx kullanıcısına ait tüm süreçleri görmek istiyorsunuz:
ps -u nginx
Veya tüm süreçler arasından belirli bir kullanıcınınkileri filtrelemek için:
ps aux | grep nginx
grep kullanırken, grep komutunun kendisinin de bir süreç olarak görünebileceğini unutmayın. Bunu önlemek için, genellikle grep desenine bir köşe ayracı eklenir:
ps aux | grep '[n]ginx'
Örnek 2: Belirli bir komut adını içeren süreçleri bulma.
Sisteminizdeki tüm apache2 süreçlerini listelemek için:
ps aux | grep apache2
Örnek 3: Belirli bir terminale bağlı süreçleri listeleme.
tty1 terminalinde çalışan süreçleri görmek için:
ps -t tty1
Çıktıyı İhtiyaca Göre Biçimlendirme ve Sıralama
ps komutu, -o seçeneği ile çıktıda hangi sütunların gösterileceğini ve bunların nasıl adlandırılacağını özelleştirmenize olanak tanır. Bu, özellikle betik yazarken veya sadece belirli bilgilere odaklanmak istediğinizde çok kullanışlıdır.
Örnek 4: Sadece PID, CPU ve COMMAND sütunlarını gösterme.
ps -eo pid,%cpu,command
Burada -e tüm süreçleri, -o ise çıktı formatını belirtir. Sütun isimleri için ps -eo help komutunu kullanarak tam listeyi görebilirsiniz.
Örnek 5: Süreçleri CPU kullanımına göre azalan sırada sıralama.
ps aux --sort=-%cpu | head -n 10
--sort=-%cpu, CPU kullanımına göre azalan sırada (- işareti azalan sıra anlamına gelir) sıralama yapar. head -n 10 ise ilk 10 süreci gösterir.
Örnek 6: Bellek kullanımına göre sıralama.
ps aux --sort=-%mem | head -n 10
Bu filtreleme ve özelleştirme teknikleri sayesinde, sisteminizdeki süreçler hakkında çok daha hedefli ve anlamlı bilgiler edinebilir, böylece potansiyel sorunları daha hızlı tespit edebilirsiniz.
Gerçek Dünya Senaryoları: Kaynak Tüketen ve Sorunlu Süreçleri Tespit Etme
Linux sistemlerinde performans sorunları veya kararsızlıklar genellikle kaynakları aşırı tüketen veya beklenmedik bir durumda olan süreçlerden kaynaklanır. ps komutu, bu tür “kaynak canavarlarını” veya “sorunlu süreçleri” tespit etmek için vazgeçilmez bir araçtır. İşte bazı gerçek dünya senaryoları ve ps komutunu kullanarak bu sorunları nasıl teşhis edebileceğiniz:
Vaka Analizi: Yüksek Kaynak Tüketimi ve Çözümleri
Bir web sunucusu yanıt vermiyor veya bir veritabanı işlemi aşırı yavaş çalışıyor. Bu durumda, ilk yapmanız gereken hangi sürecin CPU veya belleği yoğun bir şekilde kullandığını bulmaktır.
Örnek 7: En çok CPU kullanan ilk 5 süreci bulma.
ps aux --sort=-%cpu | head -n 6
head -n 6 komutunu kullanmamızın nedeni, çıktının ilk satırının genellikle başlık (header) satırı olmasıdır. Bu komut, en çok CPU kullanan süreçleri sıralar ve size sisteminizdeki CPU yükünün kaynağını gösterir.
Örnek 8: En çok bellek kullanan ilk 5 süreci bulma.
ps aux --sort=-%mem | head -n 6
Benzer şekilde, bu komut da sisteminizdeki bellek sızıntılarını veya aşırı bellek tüketen uygulamaları tespit etmenize yardımcı olur.
Örnek 9: Belirli bir PID’e ait tüm bilgileri detaylıca görme.
Eğer bir sürecin PID’ini biliyorsanız (örneğin 12345), o süreç hakkında daha fazla bilgi almak için:
ps -p 12345 -o pid,user,%cpu,%mem,vsz,rss,tty,stat,start,time,command
Bu, o sürecin tüm detaylarını tek bir satırda gösterir ve sorun giderme için çok değerlidir.
Zombi ve Kilitlenmiş Süreçleri Belirleme
Süreçlerin durumu (STAT kolonu), onların sağlığı hakkında önemli ipuçları verir. Özellikle ‘Z’ (Zombi) veya ‘D’ (Kesintisiz Uyku) durumları sorunlu süreçleri işaret edebilir.
Örnek 10: Zombi süreçleri bulma.
ps aux | grep 'Z'
Zombi süreçler, ebeveynleri tarafından düzgün bir şekilde toplanmamış (reap edilmemiş) süreçlerdir. Kaynak tüketmezler ancak PID tablosunda yer kaplarlar ve çok sayıda olmaları sorun yaratabilir.
Örnek 11: Kesintisiz uyku (Disk I/O bekleyen) süreçleri bulma.
ps aux | grep 'D'
Kesintisiz uyku durumundaki süreçler genellikle disk I/O işlemleri beklerken takılı kalmışlardır ve kill komutuyla sonlandırılamazlar. Bu durum, altta yatan bir donanım veya çekirdek sorununa işaret edebilir.
Örnek 12: Kilitlenmiş veya durdurulmuş süreçleri (Stopped) bulma.
ps aux | grep 'T'
‘T’ durumundaki süreçler genellikle bir sinyal (örneğin Ctrl+Z) ile durdurulmuş veya hata ayıklayıcı tarafından askıya alınmıştır.
Süreç Ağaçları ile İlişkileri Anlama
Bir sürecin ebeveyn-çocuk ilişkilerini anlamak, özellikle bir uygulamanın nasıl başlatıldığını veya hangi ana sürecin çöktüğünü belirlemek için çok önemlidir.
Örnek 13: Süreç ağacını görüntüleme.
pstree
pstree komutu, süreçleri hiyerarşik bir ağaç yapısında gösterir. Bu, bir sürecin hangi ebeveyn süreçten türediğini görsel olarak anlamak için çok kullanışlıdır.
Örnek 14: ps komutuyla süreç ağacını görüntüleme (ASCII formatında).
ps axjf
Bu komut, pstree‘ye benzer bir çıktı sunarak süreçlerin ebeveyn-çocuk ilişkilerini ASCII karakterlerle gösterir. Bu sayede, belirli bir servisin veya uygulamanın tüm alt süreçlerini kolayca görebilirsiniz. Örneğin, bir web sunucusunun (nginx veya apache) altında çalışan işçi süreçlerini (worker processes) bu şekilde takip edebilirsiniz. Bu derinlemesine inceleme, sisteminizdeki karmaşık sorunların kök nedenlerini anlamanıza yardımcı olacaktır.
İleri Düzey Kullanım ve Entegrasyonlar: ps Komutundan Maksimum Verim Alma
ps komutu, sadece anlık bir süreç fotoğrafı çekmekten çok daha fazlasını sunar. Diğer Linux komutlarıyla entegre edildiğinde veya betiklerde kullanıldığında, sistem yönetimi görevlerini otomatikleştirmek ve daha derinlemesine analizler yapmak için güçlü bir araç haline gelir. Bu bölümde, ps komutunun ileri düzey kullanımlarını ve diğer araçlarla nasıl entegre edilebileceğini keşfedeceğiz.
Örnek 15: Bir sürecin açık dosyalarını görüntüleme.
Bir süreç hakkında daha fazla bilgi edinmek için, o sürecin hangi dosyaları açık tuttuğunu görmek isteyebilirsiniz. Bu, özellikle kaynak kilitlenmeleri veya disk kullanımı sorunlarını gidermede faydalıdır. lsof komutu ile ps çıktısını birleştirebiliriz:
ps aux | grep 'my_application' | awk '{print $2}' | xargs lsof -p
Bu örnek, my_application sürecinin PID’ini alır ve lsof -p komutuna ileterek o sürecin açık dosyalarını listeler.
Örnek 16: Sürekli süreç izleme için watch ile kullanma.
Süreçlerin dinamik durumunu anlık olarak izlemek istediğinizde, watch komutu ps çıktısını belirli aralıklarla yenileyerek size sürekli bir görünüm sunar:
watch -n 2 'ps aux --sort=-%cpu | head -n 10'
Bu komut, her 2 saniyede bir en çok CPU kullanan ilk 10 süreci günceller. Bu, bir performans sorununu canlı olarak izlemek için oldukça etkilidir.
Örnek 17: Süreçleri PID yerine komut adına göre sonlandırma (pkill ile).
Bazen bir sürecin PID’ini bilmeden onu sonlandırmak isteyebilirsiniz. pgrep ve pkill komutları bu senaryolar için idealdir:
pgrep -l nginx
Bu, nginx adını içeren tüm süreçlerin PID’lerini ve komut adlarını listeler.
pkill nginx
Bu komut, nginx adını içeren tüm süreçlere SIGTERM sinyali göndererek onları sonlandırır. Daha agresif bir sonlandırma için pkill -9 nginx kullanabilirsiniz.
Örnek 18: Süreç durumlarını daha detaylı inceleme (STAT kolonu).
STAT kolonu, bir sürecin durumunu tek veya birkaç karakterle özetler. İşte bazı yaygın durumlar:
- R: Running (Çalışıyor) veya çalışmaya hazır.
- S: Sleeping (Uyuyor), bir olay bekliyor.
- D: Uninterruptible sleep (Kesintisiz uyku), genellikle I/O bekliyor.
- Z: Zombie (Zombi), süreç bitti ama ebeveyn tarafından toplanmadı.
- T: Stopped (Durduruldu), bir sinyal ile durduruldu.
- High-priority (Yüksek öncelikli).
- N: Low-priority (Düşük öncelikli).
- s: Session leader (Oturum lideri).
- +: Foreground process group (Ön plan süreç grubu).
- l: Multi-threaded (Çoklu iş parçacıklı).
Bu bayrakları anlamak, bir sürecin neden belirli bir şekilde davrandığını veya neden takılı kaldığını anlamanıza yardımcı olur. Örneğin, bir uygulamanın sürekli ‘D’ durumunda kalması disk I/O sorunlarına işaret edebilir.
Örnek 19: Belirli bir komutun kaç örneğinin çalıştığını sayma.
ps -ef | grep -c "httpd"
Bu komut, sistemde kaç tane httpd sürecinin çalıştığını sayar. Bu, bir servisin beklenen sayıda örneğinin çalışıp çalışmadığını kontrol etmek için kullanışlıdır.
Örnek 20: Süreçlerin çalıştığı süreyi görüntüleme.
ps -eo pid,etime,command | grep 'my_long_running_script'
etime (elapsed time) sütunu, bir sürecin ne kadar süredir çalıştığını gösterir. Bu, uzun süreli betikleri veya servisleri izlemek için faydalıdır.
Bu ileri düzey teknikler, ps komutunu daha karmaşık sistem yönetimi görevlerinde ve otomasyon senaryolarında etkin bir şekilde kullanmanızı sağlar. Unutmayın, bu makalede sunulan HTML yapısı, modern web standartlarına uygun olarak semantik bir şekilde tasarlanmıştır. Mobil uyumluluk ve farklı tema (light/dark mode) desteği gibi görsel detaylar, harici bir CSS dosyası aracılığıyla kolayca sağlanabilir. Örneğin, duyarlı tasarım için CSS’te @media sorguları kullanılarak farklı ekran boyutlarına göre düzenlemeler yapılabilir ve renk şemaları CSS değişkenleri veya tema sınıfları aracılığıyla yönetilebilir, böylece içeriğin okunabilirliği her ortamda garanti altına alınır.
Sonuç ve Sıkça Sorulan Sorular
Bu makale boyunca, Linux sistemlerinde süreç yönetiminin temel taşı olan ps komutunun derinliklerine indik. Temel kullanımlarından başlayarak, süreçleri filtreleme, çıktıları özelleştirme ve gerçek dünya senaryolarında karşılaşılan sorunları teşhis etme yöntemlerine kadar birçok konuyu ele aldık. CPU ve bellek canavarlarını tespit etmekten, zombi süreçleri bulmaya, hatta süreç ağaçlarını analiz etmeye kadar 20 farklı örnekle ps komutunun ne kadar çok yönlü ve güçlü bir araç olduğunu gösterdik. Artık, sisteminizdeki süreçler hakkında daha bilinçli kararlar verebilir, performans sorunlarını daha hızlı teşhis edebilir ve Linux ortamınızda daha etkin bir şekilde çalışabilirsiniz. ps komutu, basit bir listeleme aracından çok daha fazlasıdır; doğru kullanıldığında, bir sistem yöneticisinin en iyi dostlarından biri haline gelir. Unutmayın, pratik yapmak ve farklı senaryoları denemek, bu komutta ustalaşmanın anahtarıdır.
Sıkça Sorulan Sorular
- ps komutu ile
topveyahtoparasındaki fark nedir? pskomutu, süreçlerin anlık bir “fotoğrafını” çeker ve çıktıyı bir kereliğine gösterir.topvehtopise süreçleri dinamik olarak, gerçek zamanlı ve sürekli güncellenen bir arayüzde gösterir.htop,top‘a göre daha kullanıcı dostu bir arayüze ve ek özelliklere sahiptir.- Bir süreci sonlandırmak için
pskomutunu nasıl kullanırım? pskomutu doğrudan süreç sonlandırma yeteneğine sahip değildir. Bir süreci sonlandırmak için öncepsile sürecin PID’ini (Process ID) bulmanız, ardındankillkomutunu kullanmanız gerekir. Örneğin:kill <PID>veya daha agresif bir sonlandırma içinkill -9 <PID>.ps auxveps -efarasındaki temel fark nedir?- Her ikisi de tüm sistem süreçlerini listeler, ancak farklı sözdizimi standartlarından gelirler (
auxBSD stili,-efSystem V stili). Çıktı sütunları ve varsayılan sıralama biraz farklılık gösterebilir, ancak genellikle benzer bilgileri sunarlar. Çoğu modern Linux dağıtımında her ikisi de kullanılabilir. - Zombi süreçler neden oluşur ve onlarla nasıl başa çıkılır?
- Zombi süreçler (
STATkolonunda ‘Z’ ile gösterilir), ebeveyn süreçleri tarafından düzgün bir şekilde toplanmamış (reap edilmemiş) süreçlerdir. Kaynak tüketmezler ancak PID tablosunda yer kaplarlar. Genellikle ebeveyn süreci sonlandırıldığında zombiler de ortadan kalkar. Ebeveyn süreci tespit edip sonlandırmak veya sistemi yeniden başlatmak genellikle çözüm yoludur. - Bir sürecin hangi dizinden başlatıldığını nasıl öğrenebilirim?
- Bir sürecin PID’ini bildiğinizde,
/proc/<PID>/cwdsembolik linkine bakarak çalışma dizinini öğrenebilirsiniz. Örneğin:readlink /proc/12345/cwd.
