ฉันจะลบกระบวนการ / แอ็พพลิเคชันปัจจุบันที่กำหนดให้กับพอร์ตแล้วได้อย่างไร
ตัวอย่างเช่น: localhost:8080
ฉันจะลบกระบวนการ / แอ็พพลิเคชันปัจจุบันที่กำหนดให้กับพอร์ตแล้วได้อย่างไร
ตัวอย่างเช่น: localhost:8080
คำตอบ:
ขั้นตอนที่ 1:
เปิด cmd.exe (หมายเหตุ: คุณอาจจำเป็นต้องเรียกใช้ในฐานะผู้ดูแลระบบ แต่ไม่จำเป็นเสมอไป) จากนั้นเรียกใช้คำสั่งด้านล่าง:
netstat -ano | findstr :PORT_NUMBER
(แทนที่ PORT_NUMBER ด้วยหมายเลขพอร์ตที่คุณต้องการ แต่ใช้เครื่องหมายโคลอน)
พื้นที่วงกลมสีแดงแสดง PID (ตัวระบุกระบวนการ) ค้นหา PID ของกระบวนการที่ใช้พอร์ตที่คุณต้องการ
ขั้นตอนที่ 2:
ถัดไปเรียกใช้คำสั่งต่อไปนี้:
taskkill /PID PID /F
(ไม่มีลำไส้ใหญ่ในเวลานี้)
สุดท้ายคุณสามารถตรวจสอบว่าการดำเนินการสำเร็จหรือไม่โดยการรันคำสั่งอีกครั้งใน "ขั้นตอนที่ 1" หากประสบความสำเร็จคุณไม่ควรเห็นผลลัพธ์การค้นหาหมายเลขพอร์ตนั้นอีก
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
ขั้นตอนที่ 1 (เหมือนกันคือคำตอบที่ยอมรับโดยKavinduWije ):
netstat -ano | findstr :yourPortNumber
เปลี่ยนในขั้นตอนที่ 2 เป็น:
tskill typeyourPIDhere
หมายเหตุ : taskkill
ใช้งานไม่ได้ในเทอร์มินัล git bash บางตัว
ด้วยเครื่องมือเริ่มต้นของ Windows 10:
เปิด Windows PowerShell ในฐานะผู้ดูแลระบบ
ค้นหา PID (ProcessID) สำหรับพอร์ต 8080:
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0+ LISTEN 77777
ฆ่ากระบวนการซอมบี้:
taskkill /f /pid 77777
โดยที่ "77777" เป็น PID ของคุณ
set /p port="Enter port: "
-> พอร์ตอินพุต FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
-> แยก PID ออกเป็นตัวแปร taskkill /f /pid %ProcessId%
-> ฆ่าภารกิจ cmd /k
-> เปิดหน้าต่างไว้
หากคุณใช้ GitBash
ขั้นตอนแรก:
netstat -ano | findstr :8080
ขั้นตอนที่สอง:
taskkill /PID typeyourPIDhere /F
( /F
ยุติกระบวนการอย่างเด็ดขาด)
ในWindows PowerShellเวอร์ชัน 1 หรือใหม่กว่าเพื่อหยุดกระบวนการในประเภทพอร์ต 3000:
Stop-Process (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force
ตามที่แนะนำโดย @morganpdx ที่นี่มี PowerShell-ish มากกว่ารุ่นที่ดีกว่า:
หยุดกระบวนการ -Id (Get-NetTCPConnection -LocalPort 3000) การเป็นเจ้าของกระบวนการ - บังคับใช้
'Stop-Process' is not recognized as an internal or external command,
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
สำหรับใช้ในบรรทัดคำสั่ง:
for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a
สำหรับใช้ในไฟล์ bat:
for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
หากคุณทราบหมายเลขพอร์ตแล้วอาจพอเพียงที่จะส่งสัญญาณการเลิกจ้างซอฟต์แวร์ไปยังกระบวนการ (SIGTERM):
kill $(lsof -t -i :PORT_NUMBER)
lsof -nt -i4TCP:9001
เช่นกัน
สำหรับผู้ใช้ Windows คุณสามารถใช้เครื่องมือCurrPortsเพื่อฆ่าพอร์ตภายใต้การใช้งานได้อย่างง่ายดาย:
ฉันใช้งาน Zookeeper บน Windows และไม่สามารถหยุดZooKeeper ที่ทำงานที่พอร์ต 2181 โดยใช้ zookeeper-stop.sh ดังนั้นให้ลองใช้วิธีการเฉือน "//" สองครั้งนี้กับ taskkill มันได้ผล
1. netstat -ano | findstr :2181
TCP 0.0.0.0:2181 0.0.0.0:0 LISTENING 8876
TCP [::]:2181 [::]:0 LISTENING 8876
2.taskkill //PID 8876 //F
SUCCESS: The process with PID 8876 has been terminated.
หากคุณใช้Windows Terminalกระบวนการฆ่าอาจน่าเบื่อน้อยลง ฉันใช้เทอร์มินัล windows และkill PID
ทำงานได้ดีสำหรับฉันที่จะฆ่ากระบวนการบนพอร์ตเนื่องจาก Windows Terminal ใหม่รองรับคำสั่ง bash บางคำสั่ง ตัวอย่างเช่น:kill 13300
ดังนั้นกระบวนการที่สมบูรณ์จะมีลักษณะเช่นนี้ -
netstat -ano | findstr :PORT
kill PID
ตัวอย่างเช่น:
PS C:\Users\username> netstat -ano | findstr :4445
TCP 0.0.0.0:4445 0.0.0.0:0 LISTENING 7368
TCP [::]:4445 [::]:0 LISTENING 7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>
ดูเมื่อฉันพิมพ์คำสั่งแรกเพื่อแสดงรายการกระบวนการบนพอร์ตที่ส่งคืนว่าง นั่นหมายความว่ากระบวนการทั้งหมดจะถูกฆ่าในขณะนี้
kill
หน้าเว็บที่มีฟังก์ชั่นทั้งหมดที่มีให้บริการในสถานีเช่น ไม่โพสต์ที่นี่ถ้าฉันพบ
คุณสามารถทำได้โดยเรียกใช้ไฟล์ค้างคาว:
@ECHO OFF
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
ในกรณีที่คุณต้องการใช้ Python: check เป็นไปได้ไหมที่ python จะฆ่าโพรเซสที่กำลังฟังบนพอร์ตเฉพาะเช่น 8080?
คำตอบจากSmunkทำงานได้ดี ฉันทำซ้ำรหัสของเขาที่นี่:
from psutil import process_iter
from signal import SIGTERM # or SIGKILL
for proc in process_iter():
for conns in proc.connections(kind='inet'):
if conns.laddr.port == 8080:
proc.send_signal(SIGTERM) # or SIGKILL
continue
โซลูชันบรรทัดเดียวที่ใช้GitBash :
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`
แทนที่8080ด้วยพอร์ตที่เซิร์ฟเวอร์ของคุณกำลังรับฟัง
หากคุณต้องการใช้งานบ่อยให้ลองเพิ่ม~/.bashrc
ฟังก์ชั่นของคุณ:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}
และเพียงแค่เรียกใช้
killport 8080
เราสามารถหลีกเลี่ยงปัญหานี้ได้โดยการเริ่มต้น IIS ใหม่โดยใช้คำสั่งด้านล่าง:
IISRESET