CMD ile Görev Yöneticisi Alternatifleri: tasklist ve taskkill Kullanımı
Görev Yöneticisi’ni açmaya çalışıyorsun, sistem donmuş durumda, fare hiç tepki vermiyor. Klasik bir Windows Server anı. İşte tam bu noktada komut satırının değerini anlıyorsun. tasklist ve taskkill komutları, Görev Yöneticisi’nin yapabileceği her şeyi ve fazlasını komut satırından yapmanı sağlıyor. Üstelik uzak sunucularda, scriptlerde ve otomatik görevlerde çok daha güçlü araçlar bunlar.
tasklist Komutu: Süreçleri Görmek
tasklist komutu, sistemde çalışan tüm süreçleri listeler. Tek başına çalıştırdığında sana PID (Process ID), bellek kullanımı ve oturum bilgilerini verir.
tasklist
Bu komutu çalıştırdığında ekrana düzinelerce satır gelir. Peki bunu nasıl daha kullanışlı hale getirirsin?
Temel Parametreler
/FO: Çıktı formatını belirler. TABLE, LIST veya CSV seçenekleri vardır.
/NH: Başlık satırını gizler (No Header). Özellikle scriptlerde çıktıyı parse ederken işe yarar.
/V: Verbose mod. Kullanıcı adı, CPU süresi ve pencere başlığı gibi ek bilgileri gösterir.
/FI: Filtre uygular. Belirli kriterlere göre süreçleri listeler.
/SVC: Her sürecin altında çalışan servisleri gösterir.
/M: Belirli bir DLL kullanan süreçleri listeler.
/S: Uzak bilgisayara bağlanır.
/U: Uzak bağlantı için kullanıcı adı belirtir.
/P: Uzak bağlantı için parola belirtir.
Filtreleme ile Çalışmak
tasklistin en güçlü özelliği filtreleme. /FI parametresiyle istediğin süreci hızlıca bulabilirsin.
tasklist /FI "IMAGENAME eq chrome.exe"
Bu komut sadece Chrome süreçlerini listeler. Eğer Chrome birden fazla sekme açıksa her biri ayrı satırda görünür.
Bellek kullanımına göre filtreleme yapmak istersen:
tasklist /FI "MEMUSAGE gt 100000"
Bu komut 100 MB’dan fazla bellek kullanan süreçleri getirir. Sunucun belleği dolmuş ve sebebini arıyorsan bu komut hayat kurtarır.
PID’e göre filtreleme:
tasklist /FI "PID eq 1234"
Durum filtresi, sadece çalışan veya yanıt vermeyen süreçleri görmek için:
tasklist /FI "STATUS eq not responding"
Bu komutu özellikle seviyorum. Sistem yavaşlamış, kullanıcılar şikayet ediyor, hızlıca hangi uygulamanın askıda kaldığını görmek istiyorsun. Görev Yöneticisi açmana gerek yok.
CSV Formatında Çıktı Almak
Script yazarken veya çıktıyı bir dosyaya kaydetmek istediğinde CSV formatı çok kullanışlı:
tasklist /FO CSV > C:Logsprocesses.csv
Bunu bir scheduled task olarak ayarlarsan, her gün hangi süreçlerin çalıştığına dair kayıt tutabilirsin. Sorun çıktığında geriye dönük inceleme yapabilmek için altın değerinde.
Uzak Sunucuda Süreçleri Görmek
Bir terminale bağlı olmaksızın başka bir sunucudaki süreçleri görmek istiyorsun. İşte burada tasklist bir adım öne çıkıyor:
tasklist /S 192.168.1.100 /U domainadmin /P P@ssw0rd
Tabii ki parolayı komut satırında yazmak pek güvenli değil. Script içinde kullanıyorsan bunu bir değişkenden veya credential store’dan çekmen daha sağlıklı olur.
Servis Bilgilerini Görmek
Bir sürecin hangi Windows servislerini barındırdığını görmek için /SVC parametresini kullan:
tasklist /SVC /FI "IMAGENAME eq svchost.exe"
svchost.exe birden fazla servis çalıştırabilen bir host sürecidir. Hangi svchost’un hangi servisi çalıştırdığını bu komutla görebilirsin. CPU’yu yiyen svchost’u bulmak için bu bilgi kritik.
DLL Kullanımını İncelemek
Belirli bir DLL’i hangi süreçlerin kullandığını bulmak gerektiğinde:
tasklist /M kernel32.dll
Bu özellikle bir DLL güncelleme veya sorun giderme senaryosunda işe yarar. “Bu DLL’i kim kullanıyor, nasıl güncelleyeceğim?” sorusunun cevabı burada.
taskkill Komutu: Süreçleri Sonlandırmak
taskkill, adından da anlaşılacağı üzere süreçleri sonlandırır. Ama bunu yapabileceği birden fazla yol var ve doğru yolu seçmek önemli.
Temel Parametreler
/PID: Process ID ile sonlandırır.
/IM: Process adıyla (image name) sonlandırır.
/F: Zorla sonlandırır (Force). Uygulamaya kapanma şansı vermeden direkt keser.
/T: Süreç ağacını sonlandırır. Ana süreci ve onun başlattığı tüm alt süreçleri kapatır.
/S: Uzak bilgisayar belirtir.
/U: Uzak bağlantı için kullanıcı adı.
/P: Uzak bağlantı için parola.
/FI: Filtre uygular. tasklistteki gibi belirli kriterlere göre süreç seçer.
Basit Kullanım
Bir uygulamayı adıyla kapatmak:
taskkill /IM notepad.exe
Bu komut Notepad’e nazikçe “kapat” sinyali gönderir. Notepad kaydedilmemiş değişiklikler varsa sormaya çalışabilir, ama çoğu zaman grafik arayüz olmadan bu iletişim gerçekleşmez.
Zorla kapatmak için:
taskkill /IM notepad.exe /F
/F parametresi uygulamaya hiç şans vermez. Askıda kalan, yanıt vermeyen süreçler için bunu kullanman gerekir.
PID ile kapatmak daha güvenli bir yöntem. Aynı isimde birden fazla süreç varsa yanlış birini kapatma riskini ortadan kaldırır:
taskkill /PID 4567 /F
Süreç Ağacını Sonlandırmak
Bir ana süreç ve onun açtığı tüm alt süreçleri tek komutla kapatmak için /T parametresini kullan:
taskkill /IM chrome.exe /F /T
Chrome gibi çok sayıda alt süreç açan uygulamalarda bu parametre hayat kurtarır. /T olmadan sadece ana süreci kapatırsın, alt süreçler arka planda çalışmaya devam edebilir.
Birden Fazla Süreci Aynı Anda Kapatmak
Birden fazla süreci tek komutta kapatabilirsin:
taskkill /IM chrome.exe /IM firefox.exe /IM edge.exe /F
Sunucuda hangi tarayıcı açık kaldıysa hepsini bir anda kapatmak için ideal.
Filtre ile Kapatmak
Belirli kriterlere uyan süreçleri toplu olarak sonlandırmak:
taskkill /FI "MEMUSAGE gt 500000" /F
500 MB’dan fazla bellek kullanan tüm süreçleri kapatır. Dikkatli kullan, sistem süreçleri de bu filtreye takılabilir.
Yanıt vermeyen tüm uygulamaları kapatmak:
taskkill /FI "STATUS eq not responding" /F
Bu komutu kullanıcı şikayetlerinde çok sık başvuruyorum. Kullanıcı “her şey dondu” diyor, ben de uzaktan bu komutu çalıştırıyorum, çoğu zaman sistemi kurtarıyor.
Gerçek Dünya Senaryoları
Senaryo 1: Bellek Sızıntısı Olan Süreci Bulma ve Kapatma
Gece yarısı uyarı geliyor: Sunucu belleği %95’te. RDP bağlantısı bile zor açılıyor, Görev Yöneticisi açmak için zaman kaybetmek istemiyorsun.
tasklist /FO CSV /NH | findstr /V "System|smss|csrss|wininit|services|lsass" > C:Temphigh_mem.txt
tasklist /FI "MEMUSAGE gt 200000" /FO LIST
Bu iki komutla önce genel bir çıktı alıyorsun, sonra 200 MB üzeri kullananları görüyorsun. Sebebi bulunca:
taskkill /PID [bulunan_pid] /F
Senaryo 2: Scheduled Task ile Süreç İzleme
Her gece saat 23:00’da çalışan ve süreç listesini kaydeden bir script hazırlayalım. Sorun çıktığında geriye dönük bakmak için:
@echo off
set LOGFILE=C:Logsprocesses_%date:~-4,4%%date:~-7,2%%date:~-10,2%.csv
tasklist /FO CSV > %LOGFILE%
echo Process list saved: %LOGFILE%
REM 100MB üzeri bellek kullanımını ayrıca kaydet
echo. >> %LOGFILE%
echo HIGH MEMORY PROCESSES: >> %LOGFILE%
tasklist /FI "MEMUSAGE gt 100000" /FO CSV >> %LOGFILE%
Bu scripti Scheduled Tasks’a ekle, her gece çalıştır, sorun çıkınca eski kayıtlara bak. Hangi sürecin ne zaman şişmeye başladığını görebilirsin.
Senaryo 3: Kullanıcı Oturumu Bazlı Süreç Yönetimi
Terminal Server ortamında belirli bir kullanıcının süreçlerini görmek ve gerekirse kapatmak sık karşılaşılan bir durum:
tasklist /V /FI "USERNAME eq domainkullanici"
Bu komut o kullanıcının hangi süreçleri çalıştırdığını gösterir. Kullanıcı oturumu kilitlenmiş, süreçleri hâlâ çalışıyor ve kaynak tüketiyor mu? Tespit et ve:
taskkill /FI "USERNAME eq domainkullanici" /F
Tüm süreçlerini bir anda temizle.
Senaryo 4: Uygulama Servisi Donması
IIS üzerinde çalışan bir web uygulamasının worker process’i donmuş. w3wp.exe yanıt vermiyor ama servisler panelinden durduramıyorsun:
tasklist /FI "IMAGENAME eq w3wp.exe" /FO LIST /V
Hangi uygulama havuzunun donduğunu gör (pencere başlığında yazar), sonra:
taskkill /IM w3wp.exe /F
IIS application pool’larını yeniden başlatmak yerine direkt worker process’i kill etmek bazen daha hızlı çözüm olur. Tabii sonrasında IIS’i düzgünce yeniden başlatmayı unutma.
Senaryo 5: Uzak Sunucu Yönetimi
Datacenter’da fiziksel erişimin olmadığı, sadece network erişiminin olduğu bir sunucuda süreç yönetimi:
tasklist /S SUNUCU01 /U domainadmin /FI "STATUS eq not responding"
Sorunlu süreci bulduktan sonra:
taskkill /S SUNUCU01 /U domainadmin /PID 5678 /F
Uzak sunucularda bu komutları kullanmak için hedef makinede uzak yönetim izinlerinin açık olması gerekiyor. Remote Registry ve File and Printer Sharing servislerinin çalışıyor olması şart.
PowerShell ile Karşılaştırma
Tamam, şunu da söyleyelim: PowerShell, tasklist ve taskkillden çok daha güçlü. Ama bu komutların hâlâ değeri var. Neden?
Eski sistemlerde çalışıyor. PowerShell olmayan ya da kısıtlı ortamlarda bu komutlar kurtarıcı.
Batch scriptlerde doğal. Eski .bat dosyalarına entegre etmek çok kolay.
Hızlı ve minimal. Basit işler için fazladan modül yüklemene gerek yok.
PowerShell eşdeğerlerini bilmek de faydalı. Referans olarak:
# tasklist karşılığı PowerShell
Get-Process
# taskkill /IM karşılığı
Stop-Process -Name "notepad"
# taskkill /PID karşılığı
Stop-Process -Id 1234 -Force
# Filtreli listeleme
Get-Process | Where-Object {$_.WorkingSet -gt 100MB} | Sort-Object WorkingSet -Descending
PowerShell’in Get-Process komutu CPU kullanımını gerçek zamanlı olarak da verebiliyor, tasklistin yapamadığı bir şey bu. Ama komut satırı scripti yazıyorsan veya hızlı bir çözüm arıyorsan tasklist/taskkill ikilisi hâlâ geçerli.
Güvenlik ve Dikkat Edilmesi Gerekenler
taskkill kullanırken bazı kritik noktalara dikkat etmek lazım.
Sistem süreçlerini öldürmeyin. System, smss.exe, csrss.exe, wininit.exe, lsass.exe gibi süreçleri force kill etmeye çalışmak sistemi bluescreen’e götürebilir. Windows bunları koruma altına almış ama yine de dikkatli olmakta fayda var.
Filtreleri test edin. /FI ile filtre kullanmadan önce tasklist /FI [filtre] ile hangi süreçlerin etkileneceğini gör, sonra taskkilli çalıştır.
Üretim sunucusunda dikkatli olun. Kritik bir iş uygulamasını yanlışlıkla kapatmak ciddi sorun yaratabilir. PID kullanmak, isimle kapatmaktan her zaman daha güvenli.
Loglama yapın. Özellikle uzak sunucularda yaptığınız kill işlemlerini loglayın. Kim, ne zaman, hangi süreci kapadı bilgisi ileride lazım olabilir.
Pratik Bir İzleme Scripti
Sunucularda bırakabileceğin ve sorunlu süreçleri tespit edip raporlayan basit bir script:
@echo off
setlocal
set THRESHOLD=300000
set LOGDIR=C:LogsProcessMonitor
set TIMESTAMP=%date:~-4,4%%date:~-7,2%%date:~-10,2%_%time:~0,2%%time:~3,2%
set LOGFILE=%LOGDIR%alert_%TIMESTAMP%.log
if not exist %LOGDIR% mkdir %LOGDIR%
echo ===== PROCESS MONITOR REPORT ===== > %LOGFILE%
echo Date: %date% Time: %time% >> %LOGFILE%
echo. >> %LOGFILE%
echo --- NOT RESPONDING PROCESSES --- >> %LOGFILE%
tasklist /FI "STATUS eq not responding" /FO LIST >> %LOGFILE%
echo. >> %LOGFILE%
echo --- HIGH MEMORY USAGE (over 300MB) --- >> %LOGFILE%
tasklist /FI "MEMUSAGE gt %THRESHOLD%" /FO LIST >> %LOGFILE%
echo Report saved to: %LOGFILE%
Bu scripti her 30 dakikada bir çalıştırırsan, sorun anında neyin çalıştığına dair detaylı bir fotoğraf elde edersin.
Sonuç
tasklist ve taskkill, her Windows sistem yöneticisinin araç kutusunda olması gereken komutlar. Görev Yöneticisi güzel bir araç ama uzak sunucu yönetiminde, scriptlerde ve GUI’nin çalışmadığı kriz anlarında komut satırının yerini hiçbir şey tutamıyor.
Bu komutları iyice özümse. Filtrelerle oyna, farklı çıktı formatlarını dene, uzak sunucuya bağlanmayı pratik yap. Kriz anında ezberden yazabildiğin komutlar seni kurtarır, dokümantasyon arama fırsatın olmayabilir.
En önemli tavsiye: Her şeyi önce tasklist ile kontrol et, neyi kill edeceğini tam olarak bildiğinde taskkilli çalıştır. Acele kararlar production ortamında pahalıya patlayabilir.
