วิธีรับกระบวนการทั้งหมดภายใต้เซสชันของกระบวนการเฉพาะที่ใช้พอร์ตใน Windows cmd
Aug 17 2020
ฉันต้องการแสดงรายการและฆ่ากระบวนการทั้งหมดที่เป็นของเซสชันของกระบวนการเฉพาะที่ใช้พอร์ต สิ่งนี้ควรเกิดขึ้นผ่านชุดคำสั่ง windows ที่จะยอมรับหมายเลขพอร์ตเป็นอินพุต
ตัวอย่างเช่นสมมติว่ากระบวนการ PA กำลังฟังอยู่บนพอร์ต 8081 PA กำลังทำงานภายใต้เซสชัน S1 มีกระบวนการ PB และ PC ที่อยู่ในเซสชันเดียวกันกับ PA PB และ PC จะทำงานบนพอร์ตที่แตกต่างกัน (ไม่สำคัญว่าพอร์ตใดกำลังทำงานอยู่)
ไฟล์คำสั่ง windows / แบตช์ควรใช้ 8081 เป็นอินพุตและฆ่ากระบวนการ PA, PB และ PC
เป็นไปได้หรือไม่ ขอขอบคุณความช่วยเหลือเล็กน้อยในเรื่องนี้เนื่องจากฉันไม่ค่อยมีความเชี่ยวชาญในการใช้คำสั่งแบตช์ / สคริปต์
ความพยายามที่ล้มเหลวของฉัน:
(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)