Windows cmd'de bir bağlantı noktasını kullanan belirli bir işlemin oturumu altındaki tüm işlemler nasıl elde edilir
Bağlantı noktası kullanan belirli bir işlemin bir oturumuna ait tüm işlemleri listelemek ve sonlandırmak istiyorum. Bu, giriş olarak bir bağlantı noktası numarasını kabul eden bir Windows toplu iş komutu aracılığıyla gerçekleşmelidir.
Örneğin: Bir sürecin şu anda 8081 portunu dinlediğini varsayalım. PA, S1 oturumu altında çalışıyor PA ile aynı oturuma ait PB ve PC süreçleri var. PB ve PC farklı bağlantı noktalarında çalışacaktır (Hangi bağlantı noktalarında çalıştıkları önemli değildir)
Windows komut / toplu iş dosyası 8081'i girdi olarak almalı ve PA, PB ve PC süreçlerini sonlandırmalıdır.
Mümkün mü? Toplu komutlar / komut dosyası oluşturma konusunda çok bilgili olmadığım için bu konuda biraz yardım için minnettarım.
Başarısız girişimim:
(for /F "tokens=2" %%i in (for /f "tokens=5" %a in ('netstat -aon ^| findstr 8081') do tasklist /NH /FI "PID eq %a") do taskkill /NH /FI "SESSIONNAME eq %%i")
Yanıtlar
PowerShell'de bu aslında oldukça kolaydır:
# Get the process of the listening NetTCPConnection and the session ID of the process
$SessionId = (Get-Process -Id (Get-NetTCPConnection -State Listen -LocalPort 8081).OwningProcess).SessionId # Get all processes from that session and stop them Get-Process | Where-Object { $_.SessionId -eq $SessionId } | Stop-Process -Force -Confirm:$false
Toplu komut dosyası arıyorsanız
for /f "tokens=5" %%a in ('netstat -aon ^| findstr 8081 ^| findstr "LISTEN"') do (
for /f "tokens=3" %%b in ('tasklist /NH /FI "PID eq %%a"') do (
for /f "tokens=2" %%c in ('tasklist /NH /FI "SESSIONNAME eq %%b"') do (
taskkill /F /PID %%c
)
)
)
Bundan bir işlev yapabilirsiniz:
function kpn($port){ps|?{$_.sessionID-eq(get-NetTcpConnection -sta listen -loc $port)}|kill -fo -confirm:$false}
Ve şöyle diyelim
kpn(8081)