विंडोज सीएमडी में पोर्ट का उपयोग करने वाली किसी विशेष प्रक्रिया के सत्र के तहत सभी प्रक्रियाएं कैसे प्राप्त करें
मैं एक विशेष प्रक्रिया के सत्र से संबंधित सभी प्रक्रियाओं को सूचीबद्ध करना और मारना चाहता हूं जो एक बंदरगाह का उपयोग कर रहा है। यह विंडोज़ बैच कमांड के माध्यम से होना चाहिए जो कि पोर्ट नंबर को इनपुट के रूप में स्वीकार करेगा।
उदाहरण के लिए: मान लें कि एक प्रक्रिया 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")
जवाब
यह वास्तव में बहुत आसान है 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
यदि आप बैच स्क्रिप्ट की तलाश में हैं
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
)
)
)
आप इससे एक फंक्शन कर सकते हैं:
function kpn($port){ps|?{$_.sessionID-eq(get-NetTcpConnection -sta listen -loc $port)}|kill -fo -confirm:$false}
और इसे कॉल करें
kpn(8081)