विंडोज सीएमडी में पोर्ट का उपयोग करने वाली किसी विशेष प्रक्रिया के सत्र के तहत सभी प्रक्रियाएं कैसे प्राप्त करें

Aug 17 2020

मैं एक विशेष प्रक्रिया के सत्र से संबंधित सभी प्रक्रियाओं को सूचीबद्ध करना और मारना चाहता हूं जो एक बंदरगाह का उपयोग कर रहा है। यह विंडोज़ बैच कमांड के माध्यम से होना चाहिए जो कि पोर्ट नंबर को इनपुट के रूप में स्वीकार करेगा।

उदाहरण के लिए: मान लें कि एक प्रक्रिया PA वर्तमान में 8081 पोर्ट पर सुन रही है। PA सत्र S1 के तहत चल रहा है। PA के समान ही सत्र से संबंधित PB और PC प्रक्रियाएं हैं। पीबी और पीसी विभिन्न बंदरगाहों पर चलेंगे (यह महत्वपूर्ण नहीं है कि वे किन बंदरगाहों पर चल रहे हैं)

विंडोज़ कमांड / बैच फ़ाइल को 8081 इनपुट के रूप में लेना चाहिए और प्रक्रियाओं पीए, पीबी और पीसी को मारना चाहिए।

क्या यह संभव है? इस पर थोड़ी मदद की सराहना करें क्योंकि मैं वास्तव में बैच कमांड / स्क्रिप्टिंग में पारंगत नहीं हूं।

मेरा असफल प्रयास:

(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")

जवाब

4 GeraldSchneider Aug 17 2020 at 20:28

यह वास्तव में बहुत आसान है PowerShell में:

# 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

यदि आप बैच स्क्रिप्ट की तलाश में हैं

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

आप इससे एक फंक्शन कर सकते हैं:

function kpn($port){ps|?{$_.sessionID-eq(get-NetTcpConnection -sta listen -loc $port)}|kill -fo -confirm:$false}

और इसे कॉल करें

kpn(8081)