क्लासिक के साथ स्टार्टअप पर मेरी सेवा दुर्घटना:
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
विंडोज पर एक पोर्ट का उपयोग करने वाली प्रक्रिया की PID का पता लगाएं (उदाहरण के लिए पोर्ट: "9999")
netstat -aon | find "9999"
-a
सभी कनेक्शन और सुनने वाले पोर्ट प्रदर्शित करता है।
-o
प्रत्येक कनेक्शन के साथ संबद्ध खुद की प्रक्रिया आईडी प्रदर्शित करता है।
-n
संख्यात्मक रूप में पते और पोर्ट संख्या प्रदर्शित करता है।
आउटपुट:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
फिर पीआईडी द्वारा प्रक्रिया को मार दें
taskkill /F /PID 15776
/F
- प्रक्रिया को बलपूर्वक समाप्त करने की निर्दिष्ट करता है (तों)।
नोट: आपको कुछ निश्चित प्रक्रियाओं को मारने के लिए एक अतिरिक्त अनुमति (व्यवस्थापक से रन) की आवश्यकता हो सकती है
यदि आप इस प्रोग्राम को करना चाहते हैं, तो आप PowerShell स्क्रिप्ट में दिए गए विकल्पों में से कुछ का उपयोग कर सकते हैं:
$processPID = $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID
तथापि; ध्यान रखें कि आपका पीआईडी परिणाम जितना सटीक होगा आप उतने ही सटीक होंगे। यदि आप जानते हैं कि कौन सा मेजबान बंदरगाह पर है तो आप इसे बहुत कम कर सकते हैं। 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
सबसे अधिक संभावना उम्मीदवार आमतौर पर पहले समाप्त होता है, लेकिन अगर आपकी स्क्रिप्ट चलाने से पहले प्रक्रिया समाप्त हो गई है तो आप इसके बजाय पीआईडी 12331 के साथ समाप्त हो सकते हैं और गलत प्रक्रिया को मार सकते हैं।
एक स्क्रिप्ट के साथ कुछ गड़बड़ होने के बाद मैं इस एक्शन में आया। कॉपी करें और इसे .bat फ़ाइल में सहेजें:
FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i
पोर्ट नंबर में Change ’३३६६ ’’ को बदलें जिसे मुक्त करने की आवश्यकता है। फिर फ़ाइल को व्यवस्थापक के रूप में चलाएं। यह इस पोर्ट पर चलने वाली सभी प्रक्रियाओं को मार देगा।
कमान:
netstat -aon | findstr 4723
आउटपुट:
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
अब for
विंडोज में कमांड का उपयोग करके प्रक्रिया आईडी, "10396" को काटें ।
कमान:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
आउटपुट:
10,396
यदि आप मान के 4 वें नंबर को काटना चाहते हैं तो "LISTENING" का अर्थ है विंडोज में कमांड।
कमान:
for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
आउटपुट:
सुन
यह पोर्ट नंबर का उपयोग करके पीआईडी खोजने में मदद करता है।
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