클래식으로 시작할 때 내 서비스가 충돌합니다.
java.rmi.server.ExportException: Listen failed on port: 9999
그것을 죽이는 과정을 어떻게 찾을 수 있습니까?
클래식으로 시작할 때 내 서비스가 충돌합니다.
java.rmi.server.ExportException: Listen failed on port: 9999
그것을 죽이는 과정을 어떻게 찾을 수 있습니까?
답변:
명령 셸을 열고 다음을 입력하십시오 (포트가 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
nestat -aon | findstr 123456
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
-프로세스를 강제 종료하도록 지정합니다.
참고 : 일부 특정 프로세스를 종료하려면 추가 권한 (관리자에서 실행)이 필요할 수 있습니다.
프로그래밍 방식으로이 작업을 수행하려는 경우 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이 발생하여 잘못된 프로세스가 종료 될 수 있습니다.
명령:
netstat -aon | findstr 4723
산출:
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
이제 for
Windows 에서 명령을 사용하여 프로세스 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를 찾는 데 도움이됩니다.
lsof -i tcp:port_number
'lsof' is not recognized as an internal or external command.
복사 붙여 넣기 시나리오를 쉽게하기위한 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