Làm cách nào để giết quá trình hiện đang sử dụng một cổng trên localhost trong Windows?


Câu trả lời:


1057

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 đó.


không làm việc. quá trình vẫn được hiển thị
Hardik Mandankaa

16
Làm việc hoàn hảo. Trong trường hợp của tôi, Tomcat đã chạy trong cổng 8080 và tôi cần khởi chạy lại ứng dụng Spring của mình. i.imgur.com/aVwSYvR.png Cảm ơn bạn rất nhiều.
Hugo LM

16
Tôi đã phải nhập các ký tự thoát khi chạy taskkill:taskkill //PID 12552 //F
Robert

1
câu trả lời được chấp nhận sẽ không hoạt động đối với các dịch vụ được thiết lập để khởi động lại khi không thành công (đây không phải là linux)
Nurettin

1
tôi nghĩ bạn có nghĩa là PID_NUMBER chứ không phải PORT_NUMBER trongtaskkill /PID PORT_NUMBER /F
Marcin Kulik

132

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 ý : taskkillkhông hoạt động trong một số thiết bị đầu cuối git bash


1
đã không tìm thấy nó cho tôi
Tzvi Gregory Kaidanov

1
@TzviGregoryKaidanov bạn đang gặp phải vấn đề gì?
afsarkhan10182

1
cảm ơn, nó đã hoạt động bằng cách thay đổi nhiệm vụ thành tskill
Md Shoaib Alam

1
Đây là giải pháp hiệu quả với tôi. Tôi đang sử dụng GIT Bash.
dxhans5

1
Điều này có thể được thực hiện bằng cách chuyển đầu ra của lệnh đầu tiên đến seond không?
James

115

Với các công cụ mặc định của Windows 10:

  • Bước một:

Mở Windows PowerShell với tư cách Quản trị viên

  • Bước hai:

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

  • Bước thứ ba:

Tiêu diệt quá trình zombie:

taskkill /f /pid 77777

trong đó "77777" là PID của bạn


1
Làm cách nào để tự động hóa quy trình và kết hợp hai lệnh này lại với nhau trong một tệp bat nếu không có khả năng xem đầu ra cmd và sau đó viết lệnh mới bằng tay?
Serob_b

3
@Serob_b 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ở
Vikrant

94

Nếu bạn đang sử dụng GitBash

Bước một:

netstat -ano | findstr :8080

Bước hai:

taskkill /PID typeyourPIDhere /F 

( /Fchấm dứt mạnh mẽ quá trình)


chém đôi không làm việc cho tôi
kylexy1357

2
@ kylexy1357 thử với một dấu gạch chéo. "Dấu gạch chéo kép" là một ký tự thoát trước /, không cần thiết cho một số đạn pháo
Robert

27

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,
Màu xanh lá cây

3
Tôi thấy rằng điều này hoạt động:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
morganpdx

1
@Green Bạn cần chạy lệnh trong Windows PowerShell
chuyển

1
lỗi đầu tiên, seconf hoạt động với tôi
Tom

24

Để 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

1
Nếu bạn muốn làm điều đó trong .bat, thay thế% a cho %% a
Mahesh Narwade

23

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)

Nếu bạn biết cổng đang sử dụng IPv4, bạn cũng có thể làm lsof -nt -i4TCP:9001như vậy.
Josh Habdas

10

Đố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:

Nhập mô tả hình ảnh ở đây


10

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.

6

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 PIDhoạ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-

  • Mở thiết bị đầu cuối Windows
  • Nhập lệnh sau để hiển thị các quy trình đang chạy trên cổng mà bạn đang tìm cách tiêu diệt các quy trình. netstat -ano | findstr :PORT
  • Gõ theo để giết quá trình. 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ờ.


Tôi biết điều này hoạt động bởi vì tôi đã thử nghiệm nó, tôi đang cố gắng tìm tài liệu xung quanh nó, bạn có cái nào không?
DanStarns

@DanStarns, tôi chỉ tìm thấy điều này cho đến nay! docs.microsoft.com/en-us/windows/terminal
lazycodes

Cảm ơn thời gian của bạn, nó không hoàn toàn là trang tôi đang tìm, một trang có tất cả các chức năng được cung cấp trong thiết bị đầu cuối như kill. Ill bài ở đây nếu tôi tìm thấy.
DanStarns

1
Tôi đã không tìm thấy nhiều về điều này cho đến nay. Xin vui lòng gửi nếu bạn tìm thấy bất cứ điều gì.
lazycodes

4

Bạn có thể làm bằng cách chạy một tập tin bat:

@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

4

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

Điều này cũng hiệu quả với một ổ cắm sử dụng số cổng cụ thể trong Google Cloud! Cảm ơn rất nhiều
vui vẻ

0

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 ~/.bashrcchứ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

-1

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.