Windows: Cara tercepat untuk mematikan proses yang berjalan pada port tertentu

11

Saya akan membahas proses ini berkali-kali. Saya harus mematikan proses pada mesin Windows dan saya tahu port-nya. Biasanya langkah-langkahnya adalah sebagai berikut: Temukan PID dengan melihat port (contoh port 8084) Daftar proses yang berjalan pada port

netstat -a -o -n

Dan kemudian bunuh proses pada port itu dengan perintah berikut

taskkill /F /PID <pid>

Apakah ada hal seperti pipa atau sejenisnya yang dapat saya gunakan pada OS Windows untuk menjalankan perintah ini dalam satu baris !?

Armand
sumber
1
Maaf saya tidak bisa menulis jawaban lengkap saat ini, tetapi lihat findstr(Windows grep). Sebagai contoh: netstat -a -o -n | findstr "LISTENING" | findstr ":135". Mungkin ini membuat Anda selangkah lebih dekat;)
Der Hochstapler
@OliverSalzburg Perlu berhati-hati dengan tanggal 2 itu findstr: mungkin cocok dengan nomor port lokal atau jarak jauh. (Menerima bahwa Q tidak menentukan yang mana.)
Richard

Jawaban:

10

Apakah ada hal seperti pipa atau sejenisnya yang dapat saya gunakan pada OS Windows untuk menjalankan perintah ini dalam satu baris?

Keduanya cmd.exedan pipa dukungan PowerShell dari satu perintah ke perintah lainnya. Dalam PowerShell sesuatu seperti (ini harus berada pada satu baris pada baris perintah, atau gunakan `untuk mengawal baris baru dalam skrip):

netstat -ano
 | select -skip 4 
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} 
 | ? {$_.Fields[1] -match '15120$'}
 | % {taskkill /F /PID $_.Fields[4] }

Dimana:

  • Select -skip 4melompati empat baris tajuk pertama. ( Selectkependekan dari Select-Objectdigunakan untuk melakukan SQL SELECT seperti proyek objek.
  • %kependekan Foreach-Objectyang melakukan blok skrip pada setiap objek ( $_) di dalam pipa dan mengeluarkan hasil dari blok skrip ke pipa. Ini dia pertama-tama memecah input menjadi array bidang dan kemudian membuat objek segar dengan dua properti Originaldari string netstatdan Fieldsarray yang baru saja dibuat.
  • ?kependekan dari Where-Objectfilter mana yang didasarkan pada hasil dari blok skrip. Di sini cocok dengan regex pada akhir bidang kedua (semua wadah PowerShell berbasis nol).

(Semua diuji kecuali elemen terakhir: Saya tidak ingin memulai proses mematikan :-)).

Dalam praktiknya saya akan menyederhanakan ini, misalnya. mengembalikan hanya 0 atau PID dari yang pertama foreach(yang akan dirancang untuk mengabaikan header) dan memfilter pada nilai tidak nol sebelum memanggil taskkill. Ini akan lebih cepat untuk mengetik tetapi lebih sulit untuk diikuti tanpa mengetahui PowerShell.

Richard
sumber
untuk beberapa alasan PowerShell saya tidak mengenali pilih! Menjalankan Windows 7 "Der Befehl" pilih "atau pilih" pilih "atau pilihlah yang lain." Sama untuk "Select-Object"
Armand
Ini bekerja untuk saya, tetapi prosesnya ditemukan dua kali, saya percaya karena versi IPv4 dan IPv6 terdaftar oleh netstat. Ini menyebabkan kesalahan (mungkin tidak berbahaya) dari ERROR: The process "12345" not found..
Scott Weldon
Saya pikir takeaway yang penting di sini adalah taskkill /F /PID [PID]. Dengan itu, seseorang dapat secara manual membunuh tugas selama mereka memiliki cara untuk mendapatkan PID.
Sawtaytoes
1

Buka command prompt dan jalankan:

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

Jika Anda ingin melakukannya di .bat, ganti % a untuk %% a .

Jika Anda hanya ingin membunuh yang mendengarkan di append app (^ | find "LISTENING") di akhir find lainnya.

Josep Alsina
sumber