Windows cmd'de bir bağlantı noktasını kullanan belirli bir işlemin oturumu altındaki tüm işlemler nasıl elde edilir

Aug 17 2020

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

4 GeraldSchneider Aug 17 2020 at 20:28

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
1 Vazid Aug 17 2020 at 21:14

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
        )
    )
)
WasifHasan Sep 22 2020 at 09:34

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)