Bagaimana cara saya mematikan proses yang saat ini menggunakan port di localhost di Windows?

495

Bagaimana saya bisa menghapus proses / aplikasi saat ini yang sudah ditetapkan ke port?

Sebagai contoh: localhost:8080

KavinduWije
sumber

Jawaban:

1059

Langkah 1:

Buka cmd.exe (catatan: Anda mungkin perlu menjalankannya sebagai administrator, tetapi ini tidak selalu diperlukan), kemudian jalankan perintah di bawah ini:

netstat -ano | findstr :PORT_NUMBER

(Ganti PORT_NUMBER dengan nomor port yang Anda inginkan, tetapi pertahankan titik dua)

Area yang dilingkari merah menunjukkan PID (pengidentifikasi proses). Temukan PID dari proses yang menggunakan port yang Anda inginkan.

Langkah 2:

Selanjutnya, jalankan perintah berikut:

taskkill /PID PID /F

(Tidak ada titik dua kali ini)

Terakhir, Anda dapat memeriksa apakah operasi berhasil atau tidak dengan menjalankan kembali perintah di "Langkah 1". Jika berhasil, Anda tidak akan melihat hasil pencarian lagi untuk nomor port itu.

KavinduWije
sumber
tidak bekerja masih proses ditampilkan
Hardik Mandankaa
16
Bekerja dengan sempurna. Dalam kasus saya, Tomcat berjalan di port 8080 dan saya perlu meluncurkan aplikasi Spring saya lagi. i.imgur.com/aVwSYvR.png Terima kasih banyak.
Hugo LM
16
Saya harus memasukkan karakter melarikan diri ketika menjalankan taskkill:taskkill //PID 12552 //F
Robert
1
jawaban yang diterima tidak akan berfungsi untuk layanan yang diatur untuk memulai kembali pada kegagalan (ini bukan linux)
nurettin
1
saya pikir Anda maksudkan PID_NUMBER dan bukan PORT_NUMBER ditaskkill /PID PORT_NUMBER /F
Marcin Kulik
132

Langkah 1 ( jawaban yang sama diterima oleh KavinduWije ):

netstat -ano | findstr :yourPortNumber

Ubah pada Langkah 2 menjadi:

tskill typeyourPIDhere 

Catatan : taskkilltidak berfungsi di beberapa terminal git bash

afsarkhan10182
sumber
1
tidak menemukannya untuk saya
Tzvi Gregory Kaidanov
1
@TzviGregoryKaidanov masalah apa yang Anda hadapi?
afsarkhan10182
1
terima kasih, ini berhasil dengan mengubah taskkill menjadi tskill
Md Shoaib Alam
1
Ini adalah solusi yang berhasil untuk saya. Saya menggunakan GIT Bash.
dxhans5
1
Bisakah ini dilakukan dengan mengirimkan output dari perintah pertama ke seond?
James
115

Dengan alat standar Windows 10:

  • Langkah pertama:

Buka Windows PowerShell sebagai Administrator

  • Langkah dua:

Temukan PID (ProcessID) untuk port 8080:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0♥ LISTEN 77777

  • Langkah ketiga:

Bunuh proses zombie:

taskkill /f /pid 77777

di mana "77777" adalah PID Anda

Duracell De Monaco
sumber
1
Bagaimana cara mengotomatiskan proses dan menggabungkan kedua perintah ini bersama dalam satu file bat jika tidak ada kemungkinan untuk melihat output cmd dan kemudian menulis perintah baru secara manual?
Serob_b
3
@Serob_b set /p port="Enter port: "-> Port input FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine-> Ekstrak PID ke dalam variabel taskkill /f /pid %ProcessId%-> Bunuh tugas cmd /k -> Biarkan jendela tetap terbuka
Vikrant
94

Jika Anda menggunakan GitBash

Langkah pertama:

netstat -ano | findstr :8080

Langkah dua:

taskkill /PID typeyourPIDhere /F 

( /Fpaksa menghentikan proses)

Ara Yaghsizian
sumber
double slash tidak bekerja untuk saya
kylexy1357
2
@ kylexy1357 coba dengan sekali tebasan. "Double slash" adalah karakter pelarian yang mendahului /, yang tidak diperlukan untuk beberapa shell
Robert
27

Di Windows PowerShell versi 1 atau lebih baru untuk menghentikan proses pada port 3000 ketik:

Stop-Process (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force


Seperti yang disarankan oleh @morganpdx di sini lebih PowerShell-ish, versi yang lebih baik:

Stop-Proses -Id (Dapatkan-NetTCPConnection -LocalPort 3000) .Memiliki Proses -Force

todorm
sumber
'Stop-Process' is not recognized as an internal or external command,
Hijau
3
Saya menemukan bahwa ini bekerja:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
morganpdx
1
@ Hijau Anda harus menjalankan perintah di Windows PowerShell
todorm
1
kesalahan pertama, seconf bekerja untuk saya
Tom
24

Untuk digunakan di baris perintah:

for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a

Untuk digunakan dalam file bat:

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
Mahesh Narwade
sumber
1
Jika Anda ingin melakukannya dalam .bat, ganti% a untuk %% a
Mahesh Narwade
23

Jika Anda sudah tahu nomor port, mungkin cukup mengirim sinyal terminasi perangkat lunak ke proses (SIGTERM):

kill $(lsof -t -i :PORT_NUMBER)
Sesama Asing
sumber
Jika Anda tahu port menggunakan IPv4, Anda dapat melakukannya lsof -nt -i4TCP:9001juga.
Josh Habdas
10

Untuk pengguna Windows, Anda dapat menggunakan alat CurrPorts untuk mematikan port yang sedang digunakan dengan mudah:

Masukkan deskripsi gambar di sini

Zuhair Taha
sumber
10

Saya menjalankan zookeeper di Windows dan tidak dapat menghentikan ZooKeeper yang berjalan di port 2181 menggunakan zookeeper-stop.sh, jadi coba metode double slash "//" ini ke taskkill. Itu berhasil

     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.
driven_spider
sumber
6

Jika Anda menggunakan Terminal Windows maka proses pembunuhan mungkin sedikit kurang membosankan. Saya telah menggunakan terminal windows dan kill PIDberfungsi dengan baik bagi saya untuk mematikan proses pada port karena Terminal Windows baru mendukung perintah bash tertentu. Sebagai contoh:kill 13300

Jadi, proses lengkap akan terlihat seperti ini-

  • Buka Terminal Windows
  • Ketik perintah berikut untuk menampilkan proses yang berjalan pada port yang Anda cari untuk mematikan proses. netstat -ano | findstr :PORT
  • Ketik berikut untuk menghentikan proses. kill PID

Sebagai contoh:

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>

Lihat ketika saya mengetik perintah pertama untuk daftar proses pada port itu kembali kosong. Itu berarti semua proses terbunuh sekarang.

lazycipher
sumber
Saya tahu ini berfungsi karena saya mengujinya, saya mencoba mencari dokumentasi di sekitarnya, apakah Anda punya?
DanStarns
@DanStarns, saya hanya menemukan ini sejauh ini! docs.microsoft.com/en-us/windows/terminal
lazycipher
Terima kasih atas waktu Anda, ini bukan halaman yang saya cari, halaman dengan semua fungsi yang disediakan di terminal seperti kill. Sakit posting di sini jika saya menemukan.
DanStarns
1
Saya belum menemukan banyak tentang ini sampai sekarang. Silakan kirim jika Anda menemukan sesuatu.
lazycipher
4

Anda dapat melakukannya dengan menjalankan file 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
flopcoder
sumber
4

Jika Anda ingin melakukannya menggunakan Python: centang Apakah mungkin dalam python untuk mematikan proses yang mendengarkan pada port tertentu, misalnya 8080?

Jawaban dari Smunk bekerja dengan baik. Saya ulangi kodenya di sini:

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
Kardi Teknomo
sumber
Ini berfungsi untuk soket yang menggunakan nomor port tertentu di Google Cloud juga! Terima kasih banyak
peevesy
0

Satu solusi garis menggunakan GitBash :

 tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`

Ganti 8080 dengan port yang didengarkan oleh server Anda.

Jika Anda perlu sering menggunakannya, coba tambahkan ~/.bashrcfungsi Anda:

function killport() {
        tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}

dan jalankan saja

killport 8080
Italo Borssatto
sumber
-1

Kita dapat menghindari ini dengan me-restart IIS secara sederhana, menggunakan perintah di bawah ini:

IISRESET
ksrider 148
sumber