Di Windows apa yang bisa mencari port 8080 dan mencoba mematikan proses yang digunakannya melalui file .BAT?
Di Windows apa yang bisa mencari port 8080 dan mencoba mematikan proses yang digunakannya melalui file .BAT?
Jawaban:
Inilah perintah untuk memulai:
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
Saat Anda yakin dengan file batch Anda, hapus @ECHO
.
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
Perhatikan bahwa Anda mungkin perlu mengubahnya sedikit untuk OS yang berbeda. Sebagai contoh, pada Windows 7 Anda mungkin perlu tokens=5
bukan tokens=4
.
Bagaimana ini bekerja?
FOR /F ... %variable IN ('command') DO otherCommand %variable...
Ini memungkinkan Anda mengeksekusi command
, dan mengulang outputnya. Setiap baris akan dimasukkan ke dalam %variable
, dan dapat diperluas otherCommand
sebanyak yang Anda suka, di mana pun Anda suka. %variable
dalam penggunaan aktual hanya dapat memiliki nama satu huruf, mis %V
.
"tokens=4 delims= "
Ini memungkinkan Anda membagi setiap baris dengan spasi putih, dan mengambil potongan ke-4 di baris itu, dan memasukkannya ke dalam %variable
(dalam kasus kami, %%P
). delims
terlihat kosong, tetapi ruang ekstra itu sebenarnya signifikan.
netstat -a -n -o
Jalankan saja dan cari tahu. Menurut bantuan baris perintah, ini "Menampilkan semua koneksi dan mendengarkan port.", "Menampilkan alamat dan nomor port dalam bentuk numerik.", Dan "Menampilkan ID proses kepemilikan yang terkait dengan setiap koneksi.". Saya hanya menggunakan opsi ini karena orang lain menyarankannya, dan ternyata berhasil :)
^|
Ini mengambil output dari perintah atau program pertama ( netstat
) dan meneruskannya ke program perintah kedua ( findstr
). Jika Anda menggunakan ini secara langsung pada baris perintah, bukannya di dalam string perintah, Anda akan menggunakan |
bukan ^|
.
findstr :8080
Ini menyaring semua output yang dilewatkan ke dalamnya, hanya mengembalikan garis yang berisi :8080
.
TaskKill.exe /PID <value>
Ini membunuh tugas yang sedang berjalan, menggunakan ID proses.
%%P instead of %P
Ini diperlukan dalam file batch. Jika Anda melakukan ini pada command prompt, Anda akan menggunakannya %P
sebagai gantinya.
HELP FOR
pada baris perintah untuk melihat banyak pilihan lain yang FOR
akan memberi Anda, dan periksa netstat -?
, findstr /?
dan TaskKill /?
bantuan bahkan lebih.
tokens=4
adalah Windows XP yang saya pikir dan tokens=5
Windows 7. Juga ide yang bagus untuk /F
memaksa pembunuhan.
Buka command prompt dan jalankan perintah berikut
C:\Users\username>netstat -o -n -a | findstr 0.0:3000
TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 3116
C:\Users\username>taskkill /F /PID 3116
, di sini 3116 adalah ID proses
Untuk menemukan proses spesifik pada baris perintah, gunakan perintah di bawah ini di sini 8080 adalah port yang digunakan oleh proses
netstat -ano | findstr 8080
untuk mematikan proses, gunakan perintah di bawah ini di sini 21424 adalah proses id
taskkill /pid 21424 /F
Menggunakan solusi Merlyn menyebabkan aplikasi lain terbunuh seperti firefox. Proses-proses ini menggunakan port yang sama, tetapi tidak sebagai pendengar:
misalnya:
netstat -a -n -o | findstr :8085
TCP 0.0.0.0:8085 0.0.0.0:0 LISTENING 6568
TCP 127.0.0.1:49616 127.0.0.1:8085 TIME_WAIT 0
TCP 127.0.0.1:49618 127.0.0.1:8085 TIME_WAIT 0
Oleh karena itu, dapat mengecualikan ini dengan menambahkan "MENDENGARKAN" ke findstr sebagai berikut:
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
Untuk membuat daftar semua proses yang berjalan pada port 8080 lakukan hal berikut.
netstat -ano | temukan "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612
TCP [::]:8080 [::]:0 LISTENING 10612
Kemudian untuk membunuh proses jalankan perintah berikut
taskkill / F / PID 10612
Terima kasih semua, hanya untuk menambahkan bahwa beberapa proses tidak akan ditutup kecuali jika / F force switch juga dikirim dengan TaskKill. Juga dengan / T switch, semua utas sekunder dari proses akan ditutup.
C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^| findstr :2002') DO TaskKill.exe /PID %P /T /F
Untuk layanan, Anda perlu mendapatkan nama layanan dan menjalankan:
sc menghentikan ServiceName
Hanya untuk penyelesaian:
Saya ingin membunuh semua proses yang terhubung ke port tertentu tetapi tidak mendengarkan proses
perintah (dalam cmd shell) untuk port 9001 adalah:
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr :
netstat :
Ini bekerja karena netstat mencetak port sumber kemudian port tujuan dan kemudian DIDIRIKAN
Membuat file kelelawar dengan konten di bawah ini, ia menerima input untuk nomor port
@ECHO ON
set /p portid=Enter the Port to be killed:
echo %portid%
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr %portid% ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
Terakhir klik "Enter" untuk keluar.
Jika Anda ingin mematikan proses yang mendengarkan pada port 8080, Anda bisa menggunakan PowerShell. Cukup gabungkan Get-NetTCPConnection
cmdlet dengan Stop-Process
.
Diuji dan harus bekerja dengan PowerShell 5 pada Windows 10 atau Windows Server 2016. Namun, saya rasa itu juga harus bekerja pada versi Windows yang lebih lama yang memiliki PowerShell 5 diinstal.
Berikut ini sebuah contoh:
PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Mirip dengan respons Merlyn, tetapi yang ini menangani kasus-kasus ini juga:
Ini dia:
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
Langkah:
Buka conf
folder server tomcat apache Anda . Dalam kasus saya, apache-tomcat-7.0.61\conf
saya menggunakan apache-tomcat-7.0.61
Buka server.xml
dan ubah nomor port dari 8080 ke port lain sesuai keinginan. Sebagai contoh: 8081.8082.8087 dll
Sekarang buka bin
folder dan jalankanshutdown.bat
Sekarang restart server melalui gerhana.
Sekarang proyek Anda akan bekerja tanpa gangguan.
Jika ada yang mencari Skrip Powershell:
function Search-And-Destroy
{
param ( [Parameter(Mandatory=$true)][string]$port )
$lines = netstat -a -o -n | findstr $port
$ports = @()
ForEach($line In $lines)
{
$res = $($lines -split '\s+')
$ports += $res[5]
}
$ports = $ports | select -uniq
ForEach($port In $ports)
{
echo $(taskkill /F /PID $port)
}
}
Fungsi ini pada dasarnya melakukan apa yang dilakukan fungsi-fungsi di atas, tetapi dalam format skrip Powershell sehingga Anda dapat menambahkannya ke profil Powershell Anda. Untuk menemukan lokasi profil Anda, buka PowerShell dan ketikecho $profile
netstat
alat.
Rekatkan ini ke baris perintah
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
Jika Anda ingin menggunakannya dalam batch pu, %%P
bukan%P
netstat
alat ini diterjemahkan ke bahasa lain
jika Anda dengan sistem Anda tidak dapat mengakhiri tugas itu. coba perintah ini
x:> net stop http / y