विंडोज: एक विशिष्ट पोर्ट पर चलने वाली प्रक्रिया को मारने का सबसे तेज़ तरीका


11

मैं कई बार इस प्रक्रिया पर जा रहा हूं। मुझे एक विंडोज़ मशीन पर एक प्रक्रिया को मारना है और मुझे सिर्फ इसका पोर्ट पता है। आम तौर पर चरण नीचे दिए गए हैं: बंदरगाहों को देखकर पीआईडी ​​ढूंढें (उदाहरण पोर्ट 8084) बंदरगाहों पर चलने वाली प्रक्रियाओं को सूचीबद्ध करें

netstat -a -o -n

और फिर निम्न कमांड के साथ उस पोर्ट पर प्रक्रिया को मारें

taskkill /F /PID <pid>

क्या पाइप या इसी तरह की कोई चीज है जो मैं इस कमांड को एक लाइन में चलाने के लिए विंडोज ओएस पर उपयोग कर सकता हूं !?


1
मुझे खेद है कि मैं अभी पूर्ण उत्तर नहीं लिख सकता, लेकिन findstr(Windows grep) पर एक नज़र है । उदाहरण के लिए netstat -a -o -n | findstr "LISTENING" | findstr ":135":। हो सकता है कि यह आपको एक कदम करीब हो;)
डेर होकस्टाप्लर

@OliverSalzburg उस 2 के साथ सावधान रहने की आवश्यकता है findstr: स्थानीय या दूरस्थ पोर्ट नंबर से मेल खा सकता है। (यह स्वीकार करते हुए कि क्यू निर्दिष्ट नहीं करता है।)
रिचर्ड

जवाबों:


10

क्या पाइप जैसी कोई चीज है या मैं इस कमांड को एक लाइन में चलाने के लिए विंडोज ओएस पर उपयोग कर सकता हूं?

दोनों cmd.exeऔर पॉवरशेल एक कमांड से दूसरे में पाइप सपोर्ट करते हैं। PowerShell में कुछ ऐसा है (यह कमांड लाइन पर एक सिंगल लाइन पर होना चाहिए, या स्क्रिप्ट में नई सुर्खियों से बचने के लिए `का उपयोग करें:

netstat -ano
 | select -skip 4 
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} 
 | ? {$_.Fields[1] -match '15120$'}
 | % {taskkill /F /PID $_.Fields[4] }

कहाँ पे:

  • Select -skip 4पहले चार हेडर लाइनों को छोड़ देता है। ( SQL का उपयोग ऑब्जेक्ट्स की परियोजनाओं की तरह SQL SELECT करने के Selectलिए कम है Select-Object
  • %वह छोटा है Foreach-Objectजिसके $_लिए पाइपलाइन में प्रत्येक वस्तु ( ) पर एक स्क्रिप्ट ब्लॉक करता है और स्क्रिप्ट ब्लॉक के परिणामों को पाइपलाइन में आउटपुट करता है। यहाँ यह पहली बार इनपुट को फ़ील्ड के एक सरणी में तोड़ रहा है और फिर दो गुणों Originalके साथ एक ताज़ी वस्तु बना रहा है जिसमें से स्ट्रिंग netstatऔर Fieldsअभी बनाया गया सरणी है।
  • ?Where-Objectएक स्क्रिप्ट ब्लॉक के परिणाम के आधार पर फिल्टर के लिए कम है । यहां दूसरे क्षेत्र के अंत में एक रेगेक्स से मेल खाते हैं (सभी पॉवरशेल कंटेनर एक शून्य आधारित)।

(सभी अंतिम तत्व को छोड़कर परीक्षण किया गया: मैं हत्या की प्रक्रिया शुरू नहीं करना चाहता हूं :-))।

व्यवहार में, मैं इसे सरल करूँगा, जैसे। पहले 0 या पीआईडी ​​से लौटना foreach(जिसे हेडर को अनदेखा करने के लिए डिज़ाइन किया जाएगा) और कॉल करने से पहले शून्य पर फ़िल्टर करें taskkill। यह PowerShell को जाने बिना टाइप करने के लिए तेज लेकिन कठिन होगा।


किसी कारण से मेरी शक्तियां चयन को नहीं पहचानती हैं! विंडोज 7 "डेर बेफेल" का चयन करना "ist entweder falsch geschrieben oder konnte nicht gefunden werden।" "सेलेक्ट-ऑब्जेक्ट" के लिए समान
आर्मंड

यह मेरे लिए काम करता है, लेकिन इस प्रक्रिया को दो बार पाया जाता है, मेरा मानना ​​है कि आईपीवी 4 और आईपीवी 6 संस्करणों के कारण इसे सूचीबद्ध किया गया है netstat। यह (शायद हानिरहित) त्रुटि की ओर जाता है ERROR: The process "12345" not found.
स्कॉट वेल्डन

मुझे लगता है कि यहाँ महत्वपूर्ण टेकअवे है taskkill /F /PID [PID]। इसके साथ, कोई व्यक्ति मैन्युअल रूप से कार्यों को मार सकता है जब तक कि उनके पास पीआईडी ​​प्राप्त करने का एक तरीका हो।
सवेटायटो 0

1

कमांड प्रॉम्प्ट खोलें और निष्पादित करें:

for /f "tokens=5" %a in ('netstat -aon ^| find "8080"') do taskkill /f /pid %a

यदि आप इसे एक .bat में करना चाहते हैं, %% a के लिए % प्रतिस्थापित करें ।

यदि आप बस उस पोर्ट एपेंड पर सुनने वाले को मारना चाहते हैं (^ | "LISTENING" खोजें) अन्य खोज के अंत में।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.