Windows에서 포트를 사용하는 프로세스의 PID 찾기


답변:


217

명령 셸을 열고 다음을 입력하십시오 (포트가 123456이라고 말함).

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

필요한 모든 것을 볼 수 있습니다.

헤더는 다음과 같습니다.

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

여기서 전체 세부 정보를 반환하기 때문에 pid 만 가져 오려면 어떻게해야합니까?
Gobi M

결과 위의 유일한 PID 양식을 얻는 방법
Chinya

10
또는nestat -aon | findstr 123456
ROMANIA_engineer

창문에이를 달성하기 쉬운 방법은이 질문에 보여 주었다됩니다 - stackoverflow.com/questions/48198/...
Dracontis

4
windows / cygwin의 경우 아마도 netstat -a -n -o | grep "123456"
WebComer

84

Windows에서 포트를 사용하는 프로세스의 PID를 찾습니다 (예 : 포트 : "9999").

netstat -aon | find "9999"

-a 모든 연결 및 수신 포트를 표시합니다.

-o 각 연결과 연관된 소유 프로세스 ID를 표시합니다.

-n 주소와 포트 번호를 숫자 형식으로 표시합니다.

산출:

TCP    0.0.0.0:9999       0.0.0.0:0       LISTENING       15776

그런 다음 PID로 프로세스를 종료하십시오.

taskkill /F /PID 15776

/F -프로세스를 강제 종료하도록 지정합니다.

참고 : 일부 특정 프로세스를 종료하려면 추가 권한 (관리자에서 실행)이 필요할 수 있습니다.


n 플래그를 지정하지 않으면 netstat가 종료되지 않는 이유는 무엇입니까?
Jared Beach

2
@JaredBeach-역 DNS 이름 확인을 기다리고 있으므로 시간 초과가 완료된 후 결국 완료됩니다. 이것이 내부 IP에서 중단되면 로컬 DNS 서버에 문제가있는 것입니다.
Steve Friedl 19

7

프로그래밍 방식으로이 작업을 수행하려는 경우 PowerShell 스크립트에서 다음과 같이 제공된 옵션 중 일부를 사용할 수 있습니다.

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

하나; 더 정확할수록 PID 결과가 더 정확해질 수 있습니다. 포트가 있어야하는 호스트를 알고 있으면 범위를 많이 좁힐 수 있습니다. netstat -aon | findstr "0.0.0.0:9999"하나의 응용 프로그램 만 반환하고 대부분 올바른 응용 프로그램을 반환합니다. 포트 번호 만 검색하면 다음과 같이 포트 번호에만있는 프로세스가 반환 될 수 있습니다 9999.

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

가장 가능성이 높은 후보가 일반적으로 먼저 끝나지만 스크립트를 실행하기 전에 프로세스가 종료 된 경우 대신 PID 12331이 발생하여 잘못된 프로세스가 종료 될 수 있습니다.


4

스크립트를 조작 한 후이 작업을 수행했습니다. .bat 파일에 복사하여 저장하십시오.

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

사용 가능해야하는 포트 번호에서 'find "3306"'을 변경하십시오. 그런 다음 관리자 권한으로 파일을 실행하십시오. 이 포트에서 실행중인 모든 프로세스를 종료합니다.


4

명령:

netstat -aon | findstr 4723

산출:

TCP    0.0.0.0:4723           0.0.0.0:0                LISTENING       10396

이제 forWindows 에서 명령을 사용하여 프로세스 ID "10396"을 자릅니다 .

명령:

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

산출:

10396

값의 4 번째 숫자를 자르려면 "LISTENING"을 의미하고 Windows에서 명령을 실행하십시오.

명령:

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

산출:

청취


명령이 때때로 동일한 프로세스를 여러 번 반환하므로 고유 PID를 필터링하는 방법에 대한 제안이 있습니까?
Krzysztof Krzeszewski

2

이것은 포트 번호를 사용하여 PID를 찾는 데 도움이됩니다.

lsof -i tcp:port_number

1
명령을 입력 한 후 내가받은'lsof' is not recognized as an internal or external command.
Srinivas

Linux에서 작동합니다.
Mahaveer Jangir

3
이 질문은 Windows에 관한 것입니다
acaruci

0

복사 붙여 넣기 시나리오를 쉽게하기위한 PowerShell (코어 호환) 한 줄 :

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

산출:

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

동일한 코드, 개발자 친화적 :

$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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.