Temukan PID dari proses yang menggunakan porta di Windows


Jawaban:


217

Cukup buka shell perintah dan ketik (katakanlah port Anda adalah 123456):

netstat -a -n -o | find "123456"

Anda akan melihat semua yang Anda butuhkan.

Headernya adalah:

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

di sini bagaimana saya hanya mendapatkan pid, karena mengembalikan seluruh detail
Gobi M

cara mendapatkan satu-satunya formulir PID hasil di atas
Chinya

10
atau,nestat -aon | findstr 123456
ROMANIA_engineer

Cara mudah untuk mencapai ini di windows ditunjukkan dalam pertanyaan ini - stackoverflow.com/questions/48198/…
Dracontis

4
untuk windows / cygwin, mungkin netstat -a -n -o | grep "123456"
WebComer

84

Temukan PID dari proses yang menggunakan port di Windows (mis. Port: "9999")

netstat -aon | find "9999"

-a Menampilkan semua koneksi dan port mendengarkan.

-o Menampilkan ID proses kepemilikan yang terkait dengan setiap koneksi.

-n Menampilkan alamat dan nomor port dalam bentuk numerik.

Keluaran:

TCP    0.0.0.0:9999       0.0.0.0:0       LISTENING       15776

Kemudian matikan proses dengan PID

taskkill /F /PID 15776

/F - Menentukan untuk secara paksa menghentikan proses.

Catatan: Anda mungkin memerlukan izin tambahan (dijalankan dari administrator) untuk menghentikan beberapa proses tertentu


Mengapa netstat tidak keluar kecuali Anda memberinya bendera n?
Pantai Jared

2
@JaredBeach - menunggu resolusi nama DNS terbalik, sehingga pada akhirnya akan selesai setelah batas waktu selesai. Jika ini tergantung pada IP internal , maka ini menunjukkan masalah dengan server DNS lokal Anda.
Steve Friedl

7

Jika Anda ingin melakukan ini secara terprogram, Anda dapat menggunakan beberapa opsi yang diberikan kepada Anda sebagai berikut dalam skrip PowerShell:

$processPID =  $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID

Namun; Sadarilah bahwa semakin akurat Anda, semakin akurat hasil PID Anda. Jika Anda tahu di host mana port seharusnya berada, Anda dapat mempersempitnya banyak. netstat -aon | findstr "0.0.0.0:9999"hanya akan mengembalikan satu aplikasi dan kemungkinan besar yang benar. Hanya mencari di nomor port dapat menyebabkan Anda mengembalikan proses yang kebetulan ada 9999di dalamnya, seperti ini:

TCP    0.0.0.0:9999                        0.0.0.0:0       LISTENING       15776
UDP    [fe80::81ad:9999:d955:c4ca%2]:1900  *:*                             12331

Kandidat yang paling mungkin biasanya berakhir pertama, tetapi jika proses telah berakhir sebelum Anda menjalankan skrip Anda, Anda mungkin berakhir dengan PID 12331 dan mematikan proses yang salah.


4

Setelah beberapa mengutak-atik skrip, saya sampai pada tindakan ini. Salin dan simpan dalam file .bat:

FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i

Ubah 'find "3306"' di nomor port yang harus bebas. Kemudian jalankan file tersebut sebagai administrator. Ini akan mematikan semua proses yang berjalan di port ini.


4

Perintah:

netstat -aon | findstr 4723

Keluaran:

TCP    0.0.0.0:4723           0.0.0.0:0                LISTENING       10396

Sekarang potong ID proses, "10396", menggunakan forperintah di Windows.

Perintah:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa

Keluaran:

10396

Jika Anda ingin memotong angka ke-4 dari nilai berarti "MENDENGARKAN" maka perintah di Windows.

Perintah:

for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa

Keluaran:

MENDENGARKAN


ada saran untuk memfilter PID unik karena perintah terkadang mengembalikan proses yang sama beberapa kali?
Krzysztof Krzeszewski

2

Ini membantu menemukan PID menggunakan nomor port.

lsof -i tcp:port_number

1
Setelah mengetik perintah yang saya dapatkan'lsof' is not recognized as an internal or external command.
Srinivas

Bekerja di Linux.
Mahaveer Jangir

3
Pertanyaan ini tentang Windows
acaruci

0

PowerShell (kompatibel dengan Core) satu baris untuk memudahkan skenario copypaste:

netstat -aon | Select-String 8080 | ForEach-Object { $_ -replace '\s+', ',' } | ConvertFrom-Csv -Header @('Empty', 'Protocol', 'AddressLocal', 'AddressForeign', 'State', 'PID') | ForEach-Object { $portProcess = Get-Process | Where-Object Id -eq $_.PID; $_ | Add-Member -NotePropertyName 'ProcessName' -NotePropertyValue $portProcess.ProcessName; Write-Output $_ } | Sort-Object ProcessName, State, Protocol, AddressLocal, AddressForeign | Select-Object  ProcessName, State, Protocol, AddressLocal, AddressForeign | Format-Table

Keluaran:

ProcessName State     Protocol AddressLocal AddressForeign
----------- -----     -------- ------------ --------------
System      LISTENING TCP      [::]:8080    [::]:0
System      LISTENING TCP      0.0.0.0:8080 0.0.0.0:0

Kode yang sama, ramah pengembang:

$Port = 8080

# Get PID's listening to $Port, as PSObject
$PidsAtPortString = netstat -aon `
  | Select-String $Port
$PidsAtPort = $PidsAtPortString `
  | ForEach-Object { `
      $_ -replace '\s+', ',' `
  } `
  | ConvertFrom-Csv -Header @('Empty', 'Protocol', 'AddressLocal', 'AddressForeign', 'State', 'PID')

# Enrich port's list with ProcessName data
$ProcessesAtPort = $PidsAtPort `
  | ForEach-Object { `
    $portProcess = Get-Process `
      | Where-Object Id -eq $_.PID; `
    $_ | Add-Member -NotePropertyName 'ProcessName' -NotePropertyValue $portProcess.ProcessName; `
    Write-Output $_;
  }

# Show output
$ProcessesAtPort `
  | Sort-Object    ProcessName, State, Protocol, AddressLocal, AddressForeign `
  | Select-Object  ProcessName, State, Protocol, AddressLocal, AddressForeign `
  | Format-Table
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.