Klasik ile başlangıçta servis çöküşüm:
java.rmi.server.ExportException: Listen failed on port: 9999
Onu öldürme sürecini nasıl bulabilirim?
Klasik ile başlangıçta servis çöküşüm:
java.rmi.server.ExportException: Listen failed on port: 9999
Onu öldürme sürecini nasıl bulabilirim?
Yanıtlar:
Bir komut kabuğu açın ve şunu yazın (bağlantı noktanız 123456 olsun):
netstat -a -n -o | find "123456"
İhtiyacın olan her şeyi göreceksin.
Başlıklar:
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'ta bir bağlantı noktası kullanan bir işlemin PID'sini bulun (örneğin bağlantı noktası: "9999")
netstat -aon | find "9999"
-a
Tüm bağlantıları ve dinleme bağlantı noktalarını görüntüler.
-o
Her bağlantıyla ilişkili sahip olan işlem kimliğini görüntüler.
-n
Adresleri ve bağlantı noktası numaralarını sayısal biçimde görüntüler.
Çıktı:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
Ardından işlemi PID ile sonlandırın
taskkill /F /PID 15776
/F
- İşlem (ler) in zorla sonlandırılacağını belirtir.
Not: Bazı belirli işlemleri sonlandırmak için fazladan bir izne (yöneticiden çalıştırma) ihtiyacınız olabilir.
Bunu programlı olarak yapmak istiyorsanız, size verilen seçeneklerden bazılarını bir PowerShell betiğinde aşağıdaki gibi kullanabilirsiniz:
$processPID = $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID
Ancak; Ne kadar doğru olursanız, PID sonucunuzun o kadar kesin olacağının farkında olun. Bağlantı noktasının hangi ana bilgisayarda olması gerektiğini biliyorsanız, onu çok daraltabilirsiniz. netstat -aon | findstr "0.0.0.0:9999"
yalnızca bir uygulamayı ve büyük olasılıkla doğru olanı döndürür. Yalnızca bağlantı noktası numarasını aramak, yalnızca 9999
içinde bulunan işlemleri döndürmenize neden olabilir , örneğin:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
UDP [fe80::81ad:9999:d955:c4ca%2]:1900 *:* 12331
En olası aday genellikle ilk olarak sonuçlanır, ancak işlem, komut dosyanızı çalıştırmadan önce sona erdiyse, bunun yerine PID 12331 ile sonuçlanabilir ve yanlış işlemi sonlandırabilirsiniz.
Biraz senaryo ile uğraştıktan sonra bu eyleme geldim. Bir .bat dosyasına kopyalayın ve kaydedin:
FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i
Ücretsiz olması gereken bağlantı noktası numarasındaki 'bul "3306"' yı değiştirin. Ardından dosyayı yönetici olarak çalıştırın. Bu bağlantı noktasında çalışan tüm işlemleri öldürecektir.
Komut:
netstat -aon | findstr 4723
Çıktı:
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
Şimdi for
Windows'taki komutu kullanarak "10396" işlem kimliğini kesin .
Komut:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
Çıktı:
10396
Değerin 4. sayısını kesmek istiyorsanız "DİNLEME" anlamına gelir, ardından Windows'ta komut verin.
Komut:
for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
Çıktı:
DİNLEME
Bu, port numarasını kullanarak PID'yi bulmaya yardımcı olur.
lsof -i tcp:port_number
'lsof' is not recognized as an internal or external command.
Kopyalama senaryolarını kolaylaştırmak için PowerShell (Çekirdek uyumlu) tek satırlı:
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
Çıktı:
ProcessName State Protocol AddressLocal AddressForeign
----------- ----- -------- ------------ --------------
System LISTENING TCP [::]:8080 [::]:0
System LISTENING TCP 0.0.0.0:8080 0.0.0.0:0
Aynı kod, geliştirici dostu:
$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