Làm cách nào tôi có thể xóa quy trình / ứng dụng hiện tại đã được gán cho một cổng?
Ví dụ: localhost:8080
Làm cách nào tôi có thể xóa quy trình / ứng dụng hiện tại đã được gán cho một cổng?
Ví dụ: localhost:8080
Câu trả lời:
Bước 1:
Mở cmd.exe (lưu ý: bạn có thể cần chạy nó với tư cách quản trị viên, nhưng điều này không phải lúc nào cũng cần thiết), sau đó chạy lệnh dưới đây:
netstat -ano | findstr :PORT_NUMBER
(Thay PORT_NUMBER bằng số cổng bạn muốn, nhưng giữ dấu hai chấm)
Vùng được khoanh tròn màu đỏ hiển thị PID (mã định danh quy trình). Xác định vị trí PID của quá trình sử dụng cổng bạn muốn.
Bước 2:
Tiếp theo, chạy lệnh sau:
taskkill /PID PID /F
(Không có dấu hai chấm lần này)
Cuối cùng, bạn có thể kiểm tra xem thao tác có thành công hay không bằng cách chạy lại lệnh trong "Bước 1". Nếu thành công, bạn không nên xem thêm bất kỳ kết quả tìm kiếm nào cho số cổng đó.
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
Bước 1 (tương tự là trong câu trả lời được chấp nhận được viết bởi KavinduWije ):
netstat -ano | findstr :yourPortNumber
Thay đổi trong Bước 2 thành:
tskill typeyourPIDhere
Lưu ý : taskkill
không hoạt động trong một số thiết bị đầu cuối git bash
Với các công cụ mặc định của Windows 10:
Mở Windows PowerShell với tư cách Quản trị viên
Tìm PID (ProcessID) cho cổng 8080:
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0 0 LISTEN 77777
Tiêu diệt quá trình zombie:
taskkill /f /pid 77777
trong đó "77777" là PID của bạn
set /p port="Enter port: "
-> Cổng đầu vào FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
-> Trích xuất PID thành biến taskkill /f /pid %ProcessId%
-> Giết tác vụ cmd /k
-> Giữ cửa sổ mở
Nếu bạn đang sử dụng GitBash
Bước một:
netstat -ano | findstr :8080
Bước hai:
taskkill /PID typeyourPIDhere /F
( /F
chấm dứt mạnh mẽ quá trình)
Trong Windows PowerShell phiên bản 1 trở lên để dừng quá trình trên loại cổng 3000:
Dừng quá trình (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force
Theo đề xuất của @morganpdx tại đây, hãy thêm PowerShell-ish, phiên bản tốt hơn:
Dừng quá trình -Id (Get-NetTCPConnection -LocalPort 3000) .OwningProcess -Force
'Stop-Process' is not recognized as an internal or external command,
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
Để sử dụng trong dòng lệnh:
for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a
Để sử dụng trong tập tin bat:
for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
Nếu bạn đã biết số cổng, có thể sẽ đủ để gửi tín hiệu chấm dứt phần mềm đến quy trình (SIGTERM):
kill $(lsof -t -i :PORT_NUMBER)
lsof -nt -i4TCP:9001
như vậy.
Đối với người dùng Windows, bạn có thể sử dụng công cụ CurrPorts để tiêu diệt các cổng theo cách sử dụng một cách dễ dàng:
Tôi đang chạy Zookeeper trên Windows và không thể ngăn ZooKeeper chạy ở cổng 2181 bằng cách sử dụng zookeeper-stop.sh, vì vậy đã thử phương pháp "//" chém kép này để làm nhiệm vụ. Nó đã làm việc
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.
Nếu bạn đang sử dụng Windows Terminal thì quá trình tiêu diệt có thể ít tẻ nhạt hơn. Tôi đã sử dụng windows terminal và kill PID
hoạt động tốt đối với tôi để tiêu diệt các tiến trình trên cổng vì Windows Terminal mới hỗ trợ một số lệnh bash nhất định. Ví dụ:kill 13300
Vì vậy, quá trình hoàn chỉnh sẽ như thế này-
netstat -ano | findstr :PORT
kill PID
Ví dụ:
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>
Xem khi tôi gõ lệnh đầu tiên để liệt kê các tiến trình trên cổng, nó sẽ trả về sản phẩm nào. Điều đó có nghĩa là tất cả các quy trình bị giết ngay bây giờ.
kill
. Ill bài ở đây nếu tôi tìm thấy.
Trong trường hợp bạn muốn làm điều đó bằng Python: kiểm tra Có thể trong python có thể giết tiến trình đang nghe trên cổng cụ thể, ví dụ 8080 không?
Câu trả lời từ Smunk hoạt động độc đáo. Tôi nhắc lại mã của anh ấy ở đây:
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
Giải pháp một dòng bằng GitBash :
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`
Thay thế 8080 bằng cổng mà máy chủ của bạn đang nghe.
Nếu bạn cần sử dụng nó thường xuyên, hãy thử thêm vào ~/.bashrc
chức năng của bạn :
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}
và chỉ cần chạy
killport 8080
Chúng ta có thể tránh điều này bằng cách khởi động lại IIS đơn giản, sử dụng lệnh dưới đây:
IISRESET