आप मृत प्रक्रिया द्वारा खुले एक बंदरगाह को कैसे मुक्त कर सकते हैं?


63

मेरा एक सहकर्मी हाल ही में एक समस्या में भाग गया था, जहां एक प्रक्रिया जिसे माना जाता था कि वह अभी भी एक नेटवर्क पोर्ट से जुड़ी हुई है, अन्य प्रक्रियाओं को उस पोर्ट से बांधने से रोकती है। विशेष रूप से, netstat -a -bरिपोर्ट कर रहा था कि Systemपीआईडी ​​4476 के साथ नाम की एक प्रक्रिया में 60001 खुला था, जिसमें पीआईडी ​​4476 के साथ कोई प्रक्रिया नहीं थी, कम से कम जहाँ तक मैं बता सकता था।

प्रोसेस एक्सप्लोरर और टास्क मैनेजर ने पीआईडी ​​4476 को सूचीबद्ध नहीं किया था (हालांकि Systemपीआईडी ​​4 के साथ एक और प्रक्रिया थी, जिसमें टीसीपी कनेक्शन का अपना सेट था जिसमें 60001 शामिल नहीं थे)। taskkill /PID 4476यह भी बताया कि पीआईडी ​​4476 नहीं मिली।

क्या इस रहस्यमय प्रणाली प्रक्रिया को मारने के लिए एक तरीका है जो वर्तमान में बाध्य पोर्ट को मुक्त करने के लिए है? ऐसा होने का क्या कारण हो सकता है? ऐसी प्रक्रियाएँ कैसे हो सकती हैं जिनके बारे में टास्क मैनेजर, प्रोसेस एक्सप्लोरर और टास्ककिल में से कोई भी नहीं जानता है? रिबूटिंग समस्या को ठीक करने में कामयाब रहा, लेकिन मैं जानना चाहता हूं कि क्या रिबूट के बिना इसे ठीक करने का कोई तरीका है।


पोर्ट कब तक जारी हुआ, यह देखने के लिए आप कब तक इंतजार करते हैं? कनेक्शन (पोर्ट) किस राज्य में था? स्थापित, बंद, Time_Wait?
जॉयक्वेरी

@joeqwerty: हमने कम से कम 15-20 मिनट इंतजार किया। दुर्भाग्य से मैं भूल गया हूं कि कनेक्शन किस राज्य में = / था।
एडम रोसेनफील्ड

20 मिनट एक समस्या की तरह लग रहा है। अगली बार जब यह नेटस्टैट चलता है और कनेक्शन की स्थिति की जांच करता है, तो यह आपको एक सुराग देगा कि क्या हो रहा है। जैसा कि आपने mfinni के उत्तर पर टिप्पणी की है, हालांकि यह आपके सॉफ़्टवेयर की सेवा क्रैश होने का परिणाम हो सकता है।
जोकेवेटी

जवाबों:


58

मुझे पता है कि यह एक पुराना धागा है, लेकिन अगर किसी और के पास भी यही मुद्दा है, तो मुझे ...

क्या हो सकता है कि आपकी प्रक्रिया में क्रैश होने पर टीसीपी पोर्ट खुला हो या अन्यथा इसे बंद किए बिना स्पष्ट रूप से बाहर निकल गया हो। आम तौर पर ओएस इन प्रकार की चीजों को साफ करता है, लेकिन केवल जब प्रक्रिया रिकॉर्ड चली जाती है। हालांकि प्रक्रिया किसी भी अधिक नहीं चल रही प्रतीत हो सकती है, कम से कम एक चीज है जो इसके पीआईडी ​​के पुन: उपयोग को रोकने के लिए, इसके चारों ओर एक रिकॉर्ड रख सकती है। यह एक बच्चे की प्रक्रिया का अस्तित्व है जो माता-पिता से अलग नहीं है।

यदि आपका कार्यक्रम चल रहा है, तो किसी भी प्रक्रिया को जन्म दिया, उन्हें मारने की कोशिश करें। इसके कारण इसके प्रक्रिया रिकॉर्ड को मुक्त किया जाना चाहिए और टीसीपी पोर्ट को साफ किया जाना चाहिए। जाहिरा तौर पर खिड़कियां ऐसा तब करती हैं जब रिकॉर्ड जारी नहीं होता है जब प्रक्रिया बाहर निकलती है जैसा कि मैंने उम्मीद की थी।


1
धन्यवाद, अच्छा सर। मुझे विश्वास नहीं हो रहा है कि यह उत्तर इतना कम है, खासकर जब से Google क्वेरी "TCPView / use netstat & taskkill" उत्तरों से भर गई है जो इस मामले में मदद नहीं करते हैं। मेरे मामले में जो मदद की थी वह ProcessExplorer चला रहा था और किसी भी प्रक्रिया की तलाश कर रहा था जो अनाथ हो गया था। उन्हें बंद करने से समस्या हल हो गई।
gwiazdorrr

3
आपके संकेत के लिए धन्यवाद !! वास्तव में इस समस्या को हल करने के लिए अनाथ प्रक्रिया को मार दिया गया।
डार्कथ्रेड

धन्यवाद!! मेरे साथ भी ऐसा ही हुआ था। मैंने अनाथ प्रक्रिया को मार दिया और बंदरगाह को छोड़ दिया गया। मुझे यकीन नहीं है कि प्रक्रिया अन्वेषक का उपयोग करके अनाथ प्रक्रियाओं की खोज कैसे की जाए, लेकिन मुझे पता था कि प्रक्रियाओं के नाम जो स्पान थे, इसलिए इसे खोजना आसान था।
ग्रीज़ो

1
हमारे पास यही मुद्दा था - और प्रोसेस एक्सप्लोरर का उपयोग करके देखा गया कि डॉ। वाटसन पुराने पीआईडी ​​पर कब्जा कर रहे थे। हमने उस पोर्ट के लिए (खोजें) खोज की जिसे सेवा खोलने का प्रयास कर रही थी, और फिर डॉ। वाटसन और पीआईडी ​​के लिए 3-4 प्रविष्टियां देखीं। अजीब तरह से, हमें कुछ भी करने का मतलब नहीं था। उस प्रक्रिया की तरह लगता है 'यह जाग उठा' और यह गायब हो गया। अगली बार हमने सेवा को फिर से शुरू करने की कोशिश की, यह ठीक आया।
tresstylez

वीएस के साथ डिबगिंग के दौरान ऐसा ही मुद्दा हो सकता है। मैं वी.एस. को प्रोसेस करने के लिए संलग्न करता हूं, और कुछ चक्रों के बाद - वर्णित स्थिति होती है, लेकिन मेरी कोई भी प्रक्रिया (चिल्ड सहित) नहीं निकलती है। लेकिन "vsjitdebugger" को मारने से मदद मिलती है।
दिमित्री अजारव जूल

6

क्या आपने TCPView का उपयोग करने और कनेक्शन को बंद करने का प्रयास किया था? मुझे नहीं पता कि यह उस परिदृश्य में कनेक्शन दिखाएगा, जिसका आप वर्णन कर रहे हैं, क्योंकि मेरे साथ ऐसा कभी नहीं हुआ है। लेकिन यह केवल एक चीज है जो मैं सोच सकता हूं कि क्या यह फिर से होता है।

क्या प्रक्रिया थी - यह वाणिज्यिक सॉफ्टवेयर था, या कुछ होमग्रोन? ऐसा प्रतीत होता है कि पोर्ट 60001 का उपयोग कुछ ट्रोजन द्वारा किया जाता है - मुझे आश्चर्य है कि अगर यह रूटकिट या ऐसा कुछ हो सकता है जो ओएस से खुद को छिपा सकता है? एवी के साथ उस मशीन को एक बार एक अच्छा ओवर देना चाह सकते हैं, शायद बूट करने योग्य मीडिया से कुछ।


नहीं, हमने TCPView की कोशिश नहीं की; मैं भविष्य के लिए इसे ध्यान में रखूंगा यदि यह फिर कभी होता है। सॉफ्टवेयर हमारा इन-हाउस सॉफ्टवेयर है जो पोर्ट 60001 का उपयोग करता है - मैं लगभग निश्चित हूं कि पोर्ट ओपन रखने की प्रक्रिया हमारे सॉफ्टवेयर का एक पिछला उदाहरण था जो किसी तरह पूरी तरह से मर नहीं गया था। यह सॉफ़्टवेयर की एक और प्रतिलिपि को लॉन्च करने से रोकता है।
एडम रोसेनफील्ड

आपका आवेदन सॉकेट के SO_REUSEADDR विकल्प को बाइंड करने से पहले सही पर सेट कर सकता है। यह आपकी समस्या को हल करना चाहिए (यह * nix पर अधिक या कम अनिवार्य है)
स्टीफन

3

व्यवस्थापक के रूप में कमांड प्रॉम्प्ट खोलें

  1. C: \ WINDOWS \ system32> netstat -ano | खोज: 7895

*** चरण 2 को तब तक दोहराएं जब तक कि अधिक बच्चे की प्रक्रिया न हो

  1. C: \ WINDOWS \ system32> विकी प्रक्रिया जहां (ParentProcessId = 1091) कैप्शन प्राप्त होता है, ProcessId

    कैप्शन ProcessId

    cmd.exe 1328

2.a. C: \ WINDOWS \ system32> विकी प्रक्रिया जहां (ParentProcessId = 1328) कैप्शन प्राप्त करें, ProcessId

  Caption  ProcessId

  conhost.exe  1128

2.b. इसे तब तक दोहराएं जब तक कि आगे की बाल प्रक्रियाएं न मिलें

- फिर सभी बाल प्रक्रियाओं को मारें

  1. C: \ WINDOWS \ system32> taskkill / F / PID 1128 SUCCESS: PID 9500 के साथ प्रक्रिया समाप्त कर दी गई है।

विकी कमांड ही एकमात्र तरीका था जिससे हम वास्तव में अपने पोर्ट को खुला रखते हुए चाइल्ड प्रोसेस की पहचान करने में कामयाब रहे। बहुत धन्यवाद।
के एरलैंडसन

यह भी एकमात्र तरीका था जिससे मैंने अपना मुद्दा ठीक किया। मुख्य प्रक्रिया चली गई थी और बच्चे की प्रक्रिया निलंबित स्थिति में थी, लेकिन अभी भी एक "सुनकर" राज्य के साथ टीसीपी पोर्ट पकड़ रहा था। धन्यवाद।
गुई

1

मैंने पहले भी इसी मुद्दे का सामना किया है, netstat -a -n windows कमांड ने मुझे प्रक्रिया आईडी के साथ खुले बंदरगाहों की सूची दी है। उसमें से मैंने उस पोर्ट नंबर को उठाया है जिसे मैं कनेक्शन बंद करना चाहता था और फिर मैंने TCPView सॉफ्टवेयर का उपयोग करके उस कनेक्शन को बंद कर दिया। इसने मेरे लिए काम किया।


-4

यदि आप विंडोज़ उपयोगकर्ता हैं तो नीचे दिए गए चरणों का अनुसरण करें। चरण 1: इस रास्ते पर जाएँ: नियंत्रण कक्ष \ सभी नियंत्रण कक्ष आइटम \ प्रशासनिक उपकरण

Step2: सेवाओं पर क्लिक करें

Step3: वांछित पोर्ट पर चल रही अवांछित सेवाओं को रोकें।


-5

ps -ef | grep प्रक्रियानाम

संबंधित प्रक्रियाओं को मार डालो

किल -9 पीड पिड

मेरे मामले में काम किया


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