विंडोज पर एक पोर्ट का उपयोग करने वाली प्रक्रिया की पीआईडी ​​ढूंढें


107

क्लासिक के साथ स्टार्टअप पर मेरी सेवा दुर्घटना:

java.rmi.server.ExportException: Listen failed on port: 9999

मैं इसे मारने की प्रक्रिया कैसे खोज सकता हूं?


यहां अधिक जटिल वैकल्पिक समाधान: stackoverflow.com/questions/48198/…
थॉमस

जवाबों:


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 कैसे प्राप्त करूँ, क्योंकि यह पूरी जानकारी देता है
गोबी एम

परिणाम के ऊपर एकमात्र पीआईडी ​​फॉर्म कैसे प्राप्त करें
चिन्यालीस

10
या,nestat -aon | findstr 123456
ROMANIA_engineer

खिड़कियों पर इसे हासिल करने का आसान तरीका इस सवाल में दिखाया गया है - stackoverflow.com/questions/48198/…
Dracontis

4
windows / cygwin के लिए, यह शायद netstat -a -n -o | grep "123456"
वेबकॉम

84

विंडोज पर एक पोर्ट का उपयोग करने वाली प्रक्रिया की 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 - प्रक्रिया को बलपूर्वक समाप्त करने की निर्दिष्ट करता है (तों)।

नोट: आपको कुछ निश्चित प्रक्रियाओं को मारने के लिए एक अतिरिक्त अनुमति (व्यवस्थापक से रन) की आवश्यकता हो सकती है


जब तक आप इसे n झंडा नहीं देते, netstat से बाहर क्यों नहीं निकलता?
जारेड बीच

2
@JaredBeach - यह उलटा DNS नाम रिज़ॉल्यूशन की प्रतीक्षा कर रहा है, इसलिए यह समय समाप्त होने के बाद समाप्त हो जाएगा। यदि यह आंतरिक IP पर लटका हुआ है , तो यह आपके स्थानीय DNS सर्वर के साथ एक समस्या का सुझाव देता है।
स्टीव फ्रेडल

7

यदि आप इस प्रोग्राम को करना चाहते हैं, तो आप 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 के साथ समाप्त हो सकते हैं और गलत प्रक्रिया को मार सकते हैं।


4

एक स्क्रिप्ट के साथ कुछ गड़बड़ होने के बाद मैं इस एक्शन में आया। कॉपी करें और इसे .bat फ़ाइल में सहेजें:

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

पोर्ट नंबर में Change ’३३६६ ’’ को बदलें जिसे मुक्त करने की आवश्यकता है। फिर फ़ाइल को व्यवस्थापक के रूप में चलाएं। यह इस पोर्ट पर चलने वाली सभी प्रक्रियाओं को मार देगा।


4

कमान:

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

आउटपुट:

सुन


अद्वितीय PID को फ़िल्टर करने के लिए कोई सुझाव, क्योंकि कमांड कभी-कभी एक ही प्रक्रिया को कई बार लौटाता है?
Krzysztof Krzeszewski

2

यह पोर्ट नंबर का उपयोग करके पीआईडी ​​खोजने में मदद करता है।

lsof -i tcp:port_number

1
कमांड लिखने के बाद मुझे मिला'lsof' is not recognized as an internal or external command.
श्रीनिवास

लिनक्स में काम करता है।
महावीर जांगिड़

3
यह प्रश्न विंडोज के बारे में है
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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.