एक .BAT से इसके द्वारा उपयोग किए जा रहे पोर्ट को देखते हुए एक प्रक्रिया को मारें


128

विंडोज में पोर्ट 8080 के लिए क्या देख सकते हैं और एक .BAT फ़ाइल के माध्यम से उपयोग की जाने वाली प्रक्रिया को मारने की कोशिश करें?


मैं आपको वहां का हिस्सा प्राप्त कर सकता हूं ... कमांड प्रॉम्प्ट से कमांड 'netstat -a -n -o' का उपयोग करें और आपको प्रक्रियाओं की एक सूची दिखाई देगी और वे किन पोर्ट्स पर सुन रहे हैं (साथ ही साथ आईपी और क्या वे एक और आईपी से जुड़े हैं या नहीं ..) अमूल्य। परिणामों को परिष्कृत करने के लिए लगभग निश्चित रूप से अच्छे स्विच होंगे, लेकिन मैं उन्हें हाथ से याद नहीं कर सकता ... उम्मीद है कि कोई भी इस पर निर्माण कर सकता है?
डेव

लिनक्स में आप कर सकते हैं। यदि आप cygwin स्थापित आप बल्लेबाजी में अच्छी तरह से में करने में सक्षम होगा
दानी

@ दानी, माइक: साइगविन एक बहुत बड़ी निर्भरता है और इस समस्या को हल करने के लिए आवश्यक नहीं है। यदि आप पहले से ही इसे प्राप्त कर चुके हैं, हालांकि, इसका उपयोग करें - लिनक्स कमांड लाइन टूल बहुत बेहतर हैं।
मर्लिन मॉर्गन-ग्राहम

जवाबों:


141

यहां आपको आरंभ करने का आदेश दिया गया है:

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P

जब आप अपनी बैच फ़ाइल में आश्वस्त हों, तो हटा दें @ECHO

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P

ध्यान दें कि आपको अलग-अलग OS के लिए इसे थोड़ा बदलना पड़ सकता है। उदाहरण के लिए, विंडोज 7 पर आपको आवश्यकता हो सकती हैtokens=5 इसके बजाय है tokens=4

यह कैसे काम करता है

FOR /F ... %variable IN ('command') DO otherCommand %variable...

यह आपको commandआउटपुट पर निष्पादित और लूप करने देता है । प्रत्येक पंक्ति में भरवां जाएगा %variable, और otherCommandआप जहां चाहें, जितनी बार चाहें उतनी बार विस्तार कर सकते हैं। %variableवास्तविक उपयोग में केवल एक अक्षर का नाम हो सकता है, जैसे %V

"tokens=4 delims= "

इससे आप व्हॉट्सएप द्वारा प्रत्येक लाइन को विभाजित कर सकते हैं, और उस लाइन में 4 वां हिस्सा ले सकते हैं, और इसे %variable(हमारे मामले में %%P) भर सकते हैं। delimsखाली दिखता है, लेकिन वह अतिरिक्त स्थान वास्तव में महत्वपूर्ण है।

netstat -a -n -o

बस इसे चलाएं और पता करें। कमांड लाइन की मदद के अनुसार, यह "सभी कनेक्शनों और सुनने वाले बंदरगाहों को प्रदर्शित करता है।", "संख्यात्मक रूप में पते और पोर्ट संख्या प्रदर्शित करता है।", और "प्रत्येक कनेक्शन के साथ जुड़े स्वयं की प्रक्रिया आईडी प्रदर्शित करता है।" मैं सिर्फ इन विकल्पों का इस्तेमाल करता हूं क्योंकि किसी और ने इसका सुझाव दिया है, और यह काम हुआ :)

^|

यह पहले कमांड या प्रोग्राम ( netstat) का आउटपुट लेता है और इसे दूसरे कमांड प्रोग्राम ( findstr) पर पास करता है । यदि आप इसे कमांड लाइन पर सीधे उपयोग कर रहे हैं, तो कमांड स्ट्रिंग के अंदर के बजाय, आप |इसके बजाय उपयोग करेंगे ^|

findstr :8080

यह किसी भी आउटपुट को फ़िल्टर करता है जो उसमें पारित हो जाता है, जिसमें केवल वे लाइनें होती हैं जो वापस आती हैं :8080

TaskKill.exe /PID <value>

यह प्रक्रिया आईडी का उपयोग करके, एक रनिंग कार्य को मारता है।

%%P instead of %P

यह बैच फ़ाइलों में आवश्यक है। यदि आपने कमांड प्रॉम्प्ट पर ऐसा किया है, तो आप %Pइसके बजाय उपयोग करेंगे ।


आप टोकन, delims, आदि की जाँच के साथ खेलने के लिए आवश्यकता हो सकती है HELP FORकमांड लाइन पर अन्य विकल्पों को का एक बहुत देखने के लिए FORआपको दे देंगे, और जाँच netstat -?, findstr /?और, TaskKill /?और भी अधिक मदद के लिए।
मेरलिन मॉर्गन-ग्राहम

मैं इसे आज़माऊंगा और आपके पास वापस आऊंगा।
माइक फ्लिन

6
For / F "tokens = 5 delims =" %% P IN ('netstat -a -n -o ^ | findstr: 8080') DO TaskKill.exe / F / PID %% P
माइक फ्लिन

10
यह भी खूब रही। tokens=4विंडोज एक्सपी मुझे लगता है और tokens=5विंडोज 7 भी /Fमार को मजबूर करने के लिए एक अच्छा विचार है ।
स्ट्रालोक

1
@ MerlynMorgan-Graham क्योंकि यह एक स्वीकृत उत्तर है, कृपया इस उत्तर के साथ stackoverflow.com/a/20637662/5243762 पर अंक जोड़ने पर विचार करें
IAmSurajbusade

196

कमांड प्रॉम्प्ट खोलें और निम्न कमांड चलाएं

 C:\Users\username>netstat -o -n -a | findstr 0.0:3000
   TCP    0.0.0.0:3000      0.0.0.0:0              LISTENING       3116

C:\Users\username>taskkill /F /PID 3116

, यहाँ 3116 प्रक्रिया आईडी है


हाँ जो हर जगह अलग होगा
मोहित सिंह

3
बहुत उपयोगी ! माइंड यू के लिए मैं खोजता हूँ: ०.० के बजाय ३०००: ३००० क्योंकि यह १.२.०.०१ के बजाय १.२.०.०१ के तहत हो सकता है
लीविएल्लो at'१६

2
धन्यवाद, नियंत्रण से बाहर
वेबपैक

या आप बस netstat -ano प्रदान कर सकते हैं | पता लगाना: 9797 टास्ककिल / पीआईडी ​​टाइपिएरपाइडर / एफ यहां 9797 पोर्ट नंबर है, iI अक्सर इस कमांड का उपयोग दुर्व्यवहार / फांसी सर्वर को मारने के लिए करता है।
मोहित सिंह

53

कमांड लाइन नीचे कमांड लाइन उपयोग पर विशिष्ट प्रक्रिया खोजने के लिए यहां 8080 प्रक्रिया द्वारा उपयोग किया जाता है

netstat -ano | findstr 8080

कमांड के नीचे प्रक्रिया उपयोग को मारने के लिए यहां 21424 प्रक्रिया आईडी है

taskkill /pid 21424 /F 

@ एरलप बी एन्जॉय :)
गिरधर सिंह राठौर

19

मेरलिन के समाधान का उपयोग करके अन्य अनुप्रयोगों को फ़ायरफ़ॉक्स की तरह मार दिया गया। ये प्रक्रियाएं समान पोर्ट का उपयोग कर रही थीं, लेकिन श्रोता के रूप में नहीं:

उदाहरण के लिए:

netstat -a -n -o | findstr :8085
  TCP    0.0.0.0:8085           0.0.0.0:0              LISTENING       6568
  TCP    127.0.0.1:49616        127.0.0.1:8085         TIME_WAIT       0
  TCP    127.0.0.1:49618        127.0.0.1:8085         TIME_WAIT       0

इसलिए, निम्नानुसार "लिस्टेनिंग" जोड़कर इन्हें बाहर रखा जा सकता है:

FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P

18

पोर्ट 8080 पर चल रही सभी प्रक्रिया को सूचीबद्ध करने के लिए निम्न कार्य करें।

netstat -ano | "8080" ढूंढें

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       10612

TCP    [::]:8080              [::]:0                 LISTENING       10612

फिर प्रक्रिया को मारने के लिए निम्नलिखित कमांड चलाएँ

टास्ककिल / एफ / पीआईडी ​​10612


13

आप सभी को धन्यवाद, बस यह जोड़ने के लिए कि कुछ प्रक्रिया तब तक बंद नहीं होगी जब तक टास्ककिल के साथ / एफ बल स्विच भी नहीं भेजा जाता है। इसके अलावा / टी स्विच के साथ, प्रक्रिया के सभी माध्यमिक धागे बंद हो जाएंगे।

C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^|
 findstr :2002') DO TaskKill.exe /PID %P /T /F

सेवाओं के लिए सेवा का नाम प्राप्त करना और निष्पादित करना आवश्यक होगा:

sc stop सेवानाम


2

बस पूरा करने के लिए:

मैं एक विशिष्ट पोर्ट से जुड़ी सभी प्रक्रियाओं को मारना चाहता था, लेकिन सुनने की प्रक्रिया नहीं

पोर्ट 9001 के लिए कमांड (cmd शेल में) है:

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P

खोज :

  • r अभिव्यक्तियों के लिए है और c सटीक मिलान के लिए है।
  • [] * मिलान स्थानों के लिए है

नेटस्टैट :

  • a -> सभी
  • n -> हल नहीं (तेज)
  • ओ -> पिड

यह काम करता है क्योंकि netstat स्रोत पोर्ट को फिर गंतव्य पोर्ट को प्रिंट करता है और फिर ESTABLISHED को


2

नीचे दी गई सामग्री के साथ एक बैट फ़ाइल बनाई गई है, यह पोर्ट नंबर के लिए इनपुट को स्वीकार करता है

@ECHO ON
set /p portid=Enter the Port to be killed: 
echo %portid%                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr %portid% ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE

अंत में बाहर निकलने के लिए "एन्टर" पर क्लिक करें।


@TusharPandey यह विंडोज़ टैग्ड प्रश्न है, इसलिए यह विंडोज़ स्क्रिप्ट है, शेल स्क्रिप्ट नहीं
सिरेश यारलागड्डा

1

यदि आप पोर्ट 8080 पर सुनने वाली प्रक्रिया को मारना चाहते हैं, तो आप PowerShell का उपयोग कर सकते हैं। बस के साथ Get-NetTCPConnectioncmdlet गठबंधनStop-Process

परीक्षण किया और PowerShell 5 के साथ विंडोज 10 या विंडोज सर्वर 2016 पर काम करना चाहिए। हालांकि, मुझे लगता है कि इसे पुराने विंडोज संस्करणों पर भी काम करना चाहिए जिसमें पावरशेल 5 स्थापित है।

यहाँ एक उदाहरण है:

PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess

Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

0

मेरलिन की प्रतिक्रिया के समान, लेकिन यह इन मामलों को भी संभालता है:

  • पोर्ट नंबर वास्तव में एक और लंबे पोर्ट नंबर का बाएं विकल्प है जिसे आप नहीं ढूंढ रहे हैं। आप एक सटीक पोर्ट नंबर की खोज करना चाहते हैं ताकि आप एक यादृच्छिक, निर्दोष प्रक्रिया को न मारें!
  • स्क्रिप्ट कोड को एक से अधिक बार चलाने और हर बार सही होने की आवश्यकता होती है, पुराने, गलत उत्तर न दिखाते हुए।

यह रहा:

set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
  taskkill /PID %serverPid%
) else (
  rem echo Server is not running.
)

0

कदम:

  1. confअपने Apache tomcat सर्वर के फोल्डर पर जाएं । मेरे मामले में, इसका apache-tomcat-7.0.61\confउपयोग मैं Apache-tomcat-7.0.61 के रूप में कर रहा हूं

  2. server.xmlअपनी इच्छा के अनुसार पोर्ट नंबर को 8080 से खोलें और बदलें। उदाहरण के लिए: 8081,8082,8087 आदि

  3. अब binफोल्डर में जाएं और रन करेंshutdown.bat

  4. अब ग्रहण के माध्यम से सर्वर को पुनः आरंभ करें।

अब आपका प्रोजेक्ट बिना किसी रुकावट के काम करेगा।


0

अगर किसी को पॉवरशेल स्क्रिप्ट की तलाश है:

function Search-And-Destroy
{
    param ( [Parameter(Mandatory=$true)][string]$port )
    $lines = netstat -a -o -n | findstr $port
    $ports = @()

    ForEach($line In $lines)
    {
        $res = $($lines -split '\s+')
        $ports += $res[5]
    }

    $ports = $ports | select -uniq

    ForEach($port In $ports)
    {
        echo $(taskkill /F /PID $port)
    }
}

यह फ़ंक्शन मूल रूप से उपरोक्त फ़ंक्शन करता है, लेकिन यह पॉवर्सशेल स्क्रिप्टिंग प्रारूप में है, इसलिए आप इसे अपने पॉवर्सशेल प्रोफ़ाइल में जोड़ सकते हैं। अपने प्रोफ़ाइल के स्थान को खोजने के लिए शक्तियां और प्रकार पर जाएंecho $profile


1
यह वास्तव में पॉवरशेल स्क्रिप्ट नहीं है, लेकिन netstatटूल के चारों ओर पॉवरशेल-आधारित आवरण है ।
bahrep

0

इसे कमांड लाइन में पेस्ट करें

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)

यदि आप %%Pइसके बजाय एक बैच पु में उपयोग करना चाहते हैं%P


यह ओएस की भाषा पर निर्भर है, इसे सभी भाषाओं के लिए काम करने का कोई तरीका है?
जकोब

@ जैकब यह केवल विंडोज में cmd ​​टर्मिनल में चलाया जा सकता है, केवल .cmd या .bat फाइलों में
Eduard Florinescu

हां, लेकिन केवल अंग्रेजी भाषा में, अन्यथा "लिस्टेनिंग" का अनुवाद ओएस की भाषा में किया जाएगा।
जकॉब

@ जाकोब मुझे इस बात की जानकारी नहीं है कि इस netstatउपकरण का अन्य भाषाओं में अनुवाद किया जाता है
एडुआर्ड फ्लोरिंसक्यू

0

यदि आप सिस्टम से हैं तो आप इसे समाप्त नहीं कर सकते। इस आदेश का प्रयास करें

x:> नेट स्टॉप http / y


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