(कब) CONHOST.EXE वास्तव में आवश्यक है?


23

पृष्ठभूमि

पिछले साल मैंने एक पोर्टेबल ब्लॉग / वेब-सर्वर सिस्टम संकलित किया, जिसे मैं फ्लैश-ड्राइव से चला सकता हूं। यह बहुत अच्छा है और अद्भुत रूप से काम करता है, खासकर एक्सपी पर। समस्या यह है कि जब यह विंडोज 7 में चलाया जाता है, तो प्रत्येक कंसोल प्रोग्राम दो प्रक्रिया, प्रक्रिया स्वयं, प्लस की एक प्रति पैदा करता है conhost.exe

संकट

पोर्टेबल ब्लॉग सिस्टम के मामले में, इसके प्रत्येक सर्वर घटक (MySQL's mysqld.exe, Apache के दो उदाहरण httpd.exe, VisualSVN के दो उदाहरण visualsvnserver.exeऔर PHP के कई उदाहरण php-cgi.exe) का एक उदाहरण देता है conhost.exe। इस समय ( php-cgi.exeसक्रिय की कोई प्रतिलिपि नहीं होने के साथ , मेरे पास conhost.exeचलाने के पांच उदाहरण हैं , बिना सीपीयू चक्र के बगल में, लेकिन 22 एमबी मेमोरी का उपभोग करना (80 एमबी के अलावा जो वर्तमान में वास्तविक प्रक्रियाएं उपयोग कर रहे हैं)।

अनुसंधान

के बाद से विंडोज 7 जारी किया गया था (और मैं विस्टा के बाद से संभवतः लगता है), मैं यह पता लगाने की कोशिश की कई मौकों पर है वास्तव में क्या उद्देश्य विभिन्न (नया) मेजबान प्रक्रियाओं (जैसे, conhost.exe, dllhost.exe, और taskhost.exe) करते हैं और क्या वे वास्तव में आवश्यक हैं। मैंने उन्हें मारने की कोशिश की है और पाया है कि कंसोल प्रोग्राम काम करना जारी रखते हैं, दोनों ऐसे प्रोग्राम हैं जो कंसोल विंडो का उपयोग करते हैं, और जो (सर्वर की तरह) नहीं करते हैं।

मैं पहले से ही संपूर्ण csrss.exeVista विंडोज विस्टा ⇨conhost.exe से परिचित हूं और कई बार वही (लगभग शब्दशः) स्पष्टीकरण देख चुका हूं । समस्या यह है कि हर कोई बस उसी स्पष्टीकरण की प्रतिलिपि-पेस्ट करता है जो सहायक नहीं है। सभी यह कहते हैं कि XP- में, उन अनुप्रयोगों को कंसोल करें जहां "द्वारा होस्ट किया गया है" या "रन के तहत" csrss.exe, लेकिन विंडोज 7 में, उन्हें conhost.exeसुरक्षा के लिए स्थानांतरित किया गया था । सुरक्षा पहलू समझ में आता है, लेकिन यह इस बारे में कुछ भी नहीं कहता है कि इसे होस्ट करने का क्या मतलब है या क्यों / कब आवश्यक है (या यदि आवश्यक नहीं है तो इसे टालना संभव है)। यहां तक ​​कि रेमंड चेन की चर्चा इस बात पर होती है कि कंसोल ऐप्स को अलग तरह से क्यों होस्ट किया जाता है।

निकटतम चीज़ जो मैं एक विस्तृत, तकनीकी स्पष्टीकरण के लिए पा सकता हूं, वह एक Microsoft ब्लॉग पोस्ट है जो इस विचार को सुदृढ़ करने के लिए लगता है कि यह केवल कंसोल ऐप के GUI और विंडो के बारे में है। इससे मुझे आश्चर्य होता है कि क्या conhost.exeमैं इन सर्वरों की तरह बिना खिड़की वाले कार्यक्रमों के लिए आवश्यक हूं । यदि कोई खिड़की नहीं है, तो मुझे संसाधनों को बर्बाद करने और अनावश्यक प्रक्रियाओं के साथ प्रक्रिया-स्थान को अव्यवस्थित क्यों करना चाहिए? जब अनावश्यक हो तो Windows इसका पता क्यों नहीं लगा सकता और इससे बचना चाहिए? SecurityMatt की प्रतिक्रिया तकनीकी व्याख्या के संबंध में भी थोड़ी उपयोगी थी, लेकिन फिर से, उस जानकारी के लिए पर्याप्त नहीं है जिसकी मुझे तलाश है।

मैं अकेला नहीं हूं जिसने अनावश्यक घटनाओं को रोकने का तरीका जानने की कोशिश की है conhostइस व्यक्ति ने इसे अक्षम करने के बारे में पूछा और बिना किसी प्रयास या विचार के इसे केवल "यह संभव नहीं है" बताया गया। ह्यूग डी और "शायद ही कोई विशेषता" ने इस मुद्दे को इंगित conhostकिया csrss, कि उनके बच्चे की प्रक्रिया समाप्त होने के बाद संसाधन उपयोग और सुस्त उदाहरणों सहित (कम से कम , केवल एक ही कॉपी चल रही थी)। I Laufer ने सवाल किया कि क्या / जब यह आवश्यक है।

अवलोकन और समाधान के प्रयास

यदि वे वास्तव में हर समय आवश्यक नहीं होते हैं (फिर से, मुझे उन्हें मारने से कोई बुरा प्रभाव नहीं देखा गया है), तो मुझे लगता है कि मैं सर्वर को बैच-फ़ाइलों के साथ सर्वर को प्रतिस्थापित करके समस्या को हल कर सकता हूं (बहुत चिढ़) , रुको, और फिर उस प्रति को मार डालो conhostजो वे चलाने का कारण बनते हैं। बेशक यह निर्धारित करने का एक त्वरित और आसान तरीका है कि यह कौन सा है। FallenGameR ने पूछा कि conhost.exeकिसी दिए गए PID के कंसोल प्रोग्राम के साथ जुड़े का उदाहरण कैसे प्राप्त करें लेकिन उत्तर नहीं मिला। मुझे लगता है कि मूल प्रक्रिया के PID को पुनः प्राप्त करने के लिए चाल करना चाहिए (नहीं, ProcessExplorer एक विकल्प नहीं है, एक स्वचालित / स्क्रिप्ट योग्य हैसमाधान की आवश्यकता है), लेकिन न केवल बच्चे के पीआईडी ​​प्राप्त करने के लिए किसी प्रकार की रूपरेखा बनाने की आवश्यकता होगी (इसके बजाय इसे केवल चलाने और कार्य के साथ किया जा रहा है), लेकिन इसका मतलब यह भी होगा कि इसे संगत बनाने का एक तरीका है। XP के साथ ही (जैसे, मूल प्रक्रिया की छवि-नाम की जाँच)। यह ब्लॉग पोस्ट एक रास्ता देता है, लेकिन इसके लिए पॉवरशेल की आवश्यकता होती है और यह शायद ही आदर्श है, इसका उल्लेख नहीं करने के लिए कि यह स्क्रिप्ट चलाने के प्रभाव के बारे में कुछ नहीं कहता है।

प्रशन)

शायद Microsoft का आंकड़ा जो कोई भी कमांड-प्रॉम्प्ट का उपयोग नहीं करता है (* खांसी * विंडोज 8 * खांसी *) और इसलिए यह माना जाता है कि यह उन्हें बोझ करने के लिए एक बड़ी बात नहीं है, लेकिन निश्चित रूप से ऐसे परिदृश्य हैं जहां कई कंसोल ऐप चल रहे हैं और हर एक के पास है एक अतिरिक्त, मेमोरी-खपत, पीआईडी-का उपयोग करने वाली प्रक्रिया भयानक है, और इसके चारों ओर काम करने की कोशिश करना, सबसे अच्छा, बहुत ही असुविधाजनक है।

क्या किसी के पास मामले की निश्चित, आधिकारिक जानकारी है? फिर, मैंने पहले ही जेनेरिक स्पष्टीकरण पढ़ा है; मैं सोच रहा हूँ:

  1. क्यों कंसोल अनुप्रयोगों को (अभी भी) बिल्कुल अलग तरीके से संभाला जाना चाहिए
  2. क्या विशिष्ट परिस्थितियों में वे की जरूरत है करने के लिएconhost
  3. हत्या के क्या परिणाम होते हैंconhost
  4. यदि इसे रोकने / अक्षम करने / रोकने का कोई तरीका है या कम से कम एक आसान तरीका है तो जल्दी से इसका सामना करें?

1
इससे पहले कि कोई भी इसे लिंक करने के लिए परेशान हो (या इसके डुप्लिकेट के रूप में बंद करने के लिए मतदान करें, मैंने पहले से ही यहां अन्य प्रश्नों को देखा है जैसे [यह एक])। जैसा कि मैंने कहा, एक फाइल को एक विंडोलेस कंसोल ऐप पर खींचना अप्रासंगिक है, इसलिए conshost.exeअभी भी स्पैनिंग क्यों है ?
Synetech

1
मैंने जो भी पढ़ा है, उसमें से समस्या यह है कि विंडोज * nix करता है जैसे कंसोल को हैंडल नहीं करता है। वे बस चरित्र उपकरण नहीं हैं, और इस तरह के रूप में बिल्कुल भी नहीं (एक स्थानीय कमांड टर्मिनल के रूप में PuTTY का उपयोग करने के लिए समर्थन करने के लिए PuTTY सुविधा अनुरोध के तहत इस बारे में बहुत अच्छी चर्चा है)। मैंने हमेशा सोचा conhost.exeथा कि विंडोज एक PTY के बराबर cmd.exeथा , और वह शेल था।
डार्थ Android


@ Techie007, यह वह पृष्ठ है जिसे मैंने ( मेरी कोशिश की) उपरोक्त टिप्पणी में लिंक किया गया है
Synetech

जवाबों:


19
  1. कंसोल एप्लिकेशन को अलग-अलग संभाला जाना चाहिए क्योंकि NT कर्नेल के तहत (जो सभी 2000, XP, Vista, विंडोज 7 और विंडोज 8 को रेखांकित करता है) वे दूसरे दर्जे के नागरिक हैं। यूनिक्स सिस्टम आर्किटेक्चर में, निर्माण के समय की प्रत्येक प्रक्रिया में मानक इनपुट, आउटपुट और त्रुटि धाराएँ होती हैं; टर्मिनल IO इन धाराओं (कीबोर्ड से आने वाली स्टडिन, और टर्मिनल पर जाने वाले stdout / stderr) के संदर्भ में कार्यान्वित किया जाता है, और एक प्रक्रिया के हिस्से पर अतिरिक्त प्रयास की आवश्यकता होती है, जो उन धाराओं के उपयोग की इच्छा नहीं रखता है या जिनके पास है उनकी फ़ाइल डिस्क्रिप्टर खुली।

    विंडोज एनटी आर्किटेक्चर में, जबकि वीएमएस के एक वंशज वंशज को कम या ज्यादा एक ही टीम द्वारा विकसित नहीं किया गया था, इसके विपरीत सच है; डिफ़ॉल्ट रूप से एक नवप्रकाशित प्रक्रिया में कोई I / O स्ट्रीम नहीं है, और यह "टर्मिनल" जैसी कोई अवधारणा नहीं है। प्रोग्राम जो थोड़ा और अधिक यूनिक्स फैशन में व्यवहार करना चाहते हैं (संकलन-समय घोषणा द्वारा) अनुरोध कर सकते हैं कि सिस्टम उनके लिए एक कंसोल विंडो, और इनपुट / आउटपुट स्ट्रीम से जुड़ा हुआ है; सिस्टम ऐसा करेगा, लेकिन चूंकि विंडोज, यूनिक्स के विपरीत, आपको मुफ्त में टर्मिनल नहीं देता है, इसलिए पूर्व में csrss.exe, और अब एक बनाने के लिए काफी अतिरिक्त प्रयास की आवश्यकता होती है conhost.exe

    दोनों के बीच के अंतर के लिए, आपकी "शायद ही कोई विशेषता" लिंक इसे पर्याप्त रूप से समझाती है; संक्षेप में, यह विंडोज के अत्यधिक पुनरावृत्ति कंसोल एपीआई के पिछले पुनरावृत्ति में एक सुरक्षा दोष के आसपास काम करने के लिए मौजूद है, जिसने विंडोज 7 से पुराने NT के संस्करणों में विशेषाधिकार वृद्धि की अनुमति दी थी (विस्टा, FYI, के पास नहीं है conhost.exe, जो इसके बारे में सोच रहा है NT परिवार के विंडोज मिलेनियम के रूप में स्थिति।)

  2. कोई भी प्रोग्राम जो यूनिक्स स्टड / स्टडआउट / स्टडर के बराबर चाहता है, उसे एक कंसोल की आवश्यकता है, इसलिए इसका एक उदाहरण है conhost.exe। यूनिक्स-भूमि के अप्रवासी, जैसे कि अपाचे, पीएचपी, एट अल।, इन धाराओं को चाहते हैं, इसलिए उनके लिए सिस्टम की स्वचालित तात्कालिकता है conhost.exe, चाहे वे वास्तव में एक खिड़की प्रदर्शित करें या नहीं। सिद्धांत रूप में, उदा। अपाचे के लिए स्रोत को संशोधित करना संभव होगा जैसे कि उसे कोई टर्मिनल की आवश्यकता नहीं है, और इसे कंसोल एप्लिकेशन के बजाय विंडोज GUI एप्लिकेशन के रूप में संकलित करें, ताकि सिस्टम को इसे स्पॉन करने की आवश्यकता महसूस न हो conhost.exe। यह व्यवहार में भी संभव है, यह मानते हुए कि कोई भी ऐसा करने के लिए पर्याप्त परवाह नहीं है। शायद आप पहले होंगे।

  3. किसी दिए गए conhost.exeको मारना निश्चित रूप से कंसोल IO को अक्षम कर देगा जो उस प्रक्रिया के तहत चल रही है। आप शायद इस बारे में परवाह नहीं करते हैं क्योंकि आप सर्वर प्रक्रियाओं से निपट रहे हैं जो कंसोल IO पर वैसे भी कुछ भी दिलचस्प नहीं कर रहे हैं, इसलिए संभवतः उनके conhost.exeएस को मारने का कोई कारण नहीं है । यदि संदेह है, तो उन्हें मार डालो और देखो कि क्या यह कुछ भी तोड़ता है।

  4. conhost.exeजब कोई प्रोग्राम लॉन्च किया जाता है, जो आईओ को सांत्वना देता है, तो विंडोज को इंस्टेंट करने से रोकने का कोई तरीका नहीं है ; ऐसा करने का एकमात्र तरीका इसे फिर से जोड़ना होगा ताकि विंडोज इसे कंसोल एप्लिकेशन के रूप में न समझे। हालाँकि, यह मानते हुए कि किसी दिए गए सर्वर प्रक्रिया के माता-पिता की हत्या conhost.exeकिसी भी तरह से आपकी कार्यक्षमता को ख़राब नहीं करती है, आपको taskkill /f /im conhost.exeरन प्रांप्ट या कंसोल विंडो में जारी करके उन सभी को एक बार में मारने में सक्षम होना चाहिए - अधिमानतः पूर्व, चूंकि उत्तरार्द्ध शायद मर जाएगा, और लगभग निश्चित रूप से काम करना बंद कर देगा, जैसे ही इसके मूल conhost.exeउदाहरण को मार दिया जाएगा। फिर, अगर संदेह में, उन्हें मार डालो और देखो कि क्या यह कुछ भी तोड़ता है।


5
सभी ने कहा, एक फ्लैश ड्राइव पर एक पोर्टेबल सर्वर स्टैक लगता है कि यह किसी भी दिए गए मशीन पर चलने में ज्यादा समय खर्च नहीं करता है, और 22 एम लगभग 1% रैम पूरक है जो सबसे कम अंत वाली मशीन का पूरक है जिसे आप इन दिनों भी आसानी से खरीद सकते हैं। क्या यह वास्तव में एक समस्या के लिए इतना समय और प्रयास के लायक है?
आरोन मिलर

All that said, a portable server stack on a Flash drive sounds like it never spends much time running on any given machine मुझे नहीं पता कि इसका क्या मतलब है। क्या आप सीपीयू साइकिल के बारे में बात कर रहे हैं? यदि ऐसा है, तो एक वेब-सर्वर काफी अंकित हो सकता है यदि साइट पर्याप्त लोकप्रिय है (और यहां तक ​​कि अगर यह सामान्य रूप से अंकित किया गया है। विंडोज पर PHP बिल्कुल सीपीयू सस्ता नहीं है)। यदि आपका मतलब है कि यह सामान्य रूप से कितनी बार चलाया जाता है, तो मैं इसे पूरे सप्ताह अपने लैपटॉप पर चलाना छोड़ देता हूं।
Synetech

22M is roughly 1% of the RAM complement of the lowest-end machine you can even easily buy these days. Is it really enough of a problem to be worth this much time and effort? आप एक नई मशीन पर एक व्यक्तिगत वेब-सर्वर नहीं चलाते हैं, आप इसे एक पुराने सिस्टम पर चलाते हैं जो किसी अन्य के लिए उपयोगी नहीं है। (1997 में एक दोस्त ने मुझे बताया कि वह एक पुराने और कम से कम उस समय के मानक प्रणाली द्वारा लिनक्स वेब-सर्वर चला रहा था।) चूंकि यह पोर्टेबल है, इसलिए इसे यथासंभव संगत होना चाहिए। और यह सिर्फ स्मृति नहीं है ; एक बात के लिए, यह प्रोसेस-स्पेस और क्लॉटर्स टास्क मैनेजर को भी प्रदूषित करता है।
Synetech

Vista, FYI, does not have conhost.exe, which is befitting of its status as the Windows Millennium of the NT family. यही कारण है कि मैं के बीच विस्टा डाल है csrssकरने के लिए conhost; यह एक मध्यम कदम था। गरीब Windows ME के ​​लिए, यह बुरा नहीं है। मैंने हाल ही में VMPlayer में XP में इसे चलाकर Oracle के ज्वेल्स को फिर से खेला , लेकिन जब मैंने ज्वेल्स II को खेलने की कोशिश की , तो मैं नहीं कर सका। यह XP या 2000 में नहीं चलेगा। यह 98 में चलता है, लेकिन 98 में VMPlayer और VirtualBox में खराब ऑडियो-वीडियो का समर्थन है। एक दर्जन प्रयासों के बाद, मैंने पाया कि ओएस और वीएम का एकमात्र संयोजन जो गेम को सही ढंग से काम करने देता है, वह एमएमपी इन वीएमपीलेयर था।
Synetech

4
आदेश में: जब मैं "फ्लैश ड्राइव पर पोर्टेबल सर्वर स्टैक" सुनता हूं, तो मुझे लगता है कि "उपयोगकर्ता इसके लिए एक बॉक्स समर्पित नहीं कर सकता है और इसे आसानी से मशीनों के बीच जंगम की आवश्यकता है", क्योंकि इस तरह से करने का कोई अन्य अच्छा कारण नहीं है। यदि आप पहले से ही वीएम ओवरहेड के साथ काम कर रहे हैं, तो सिर्फ लिनक्स वीएम पर अपने वेब सर्वर स्टैक को क्यों न चलाएं? conhost.exeउस तरह से नहीं । और विंडोज एमई के लिए, मुझे नए होने पर इसे वापस समर्थन करने की कोशिश करनी थी, और आप उस ओएस के कुत्ते के नाश्ते के बारे में मेरी राय के बिना सभी अस्पष्ट, बेलगाम कोने के मामलों का हवाला दे सकते हैं, जो मैं पूरे दिन खराब कर सकता था बिना न्याय के।
एरोन मिलर

7

DETACHED_PROCESSझंडे के साथ शुरू किए गए एक कंसोल एप्लिकेशन को कंसोल नहीं मिलता है और न ही एक कॉन्स्टो चाइल्ड प्रक्रिया। समस्या यह है कि झंडा ग्रैंड-बच्चों पर लागू नहीं होता है, इसलिए यह केवल उन प्रक्रियाओं के साथ काम करेगा जो आप सीधे शुरू करते हैं (यदि आप एक उपयोगिता भी पा सकते हैं जो आपको इस ध्वज को निर्दिष्ट करने की अनुमति देता है)।

अन्य विकल्प जो काम कर सकते हैं, यदि कंसोल प्रक्रिया FreeConsole()फ़ंक्शन को कॉल करती है। कुछ सर्वर अनुप्रयोग एक -d या -detach पैरामीटर का समर्थन करते हैं लेकिन यह संभवतः * nix सिस्टम पर अधिक सामान्य है ...


1
यह शानदार लगता है। उन पृष्ठों में से कोई भी उल्लेख नहीं करता है conhost, लेकिन कनेक्शन काफी स्पष्ट लगता है। मैं यह देखने के लिए कुछ परीक्षण करूंगा कि इसके किस प्रकार के प्रभाव हैं।
Synetech

2

त्वरित समाधान जो आपके लिए काम कर सकता है। अपने आवेदन को जोड़ते समय / SUBSYSTEM: विकल्प के विकल्प में जोड़ें। आप मौजूदा निष्पादन योग्य को संशोधित करने के लिए editbin.exe का उपयोग भी कर सकते हैं।

यह आप के लिए एक conhost.exe spawning से विंडोज़ रोकता है आवेदन।


यह आशाजनक लग रहा था, लेकिन मैंने सिर्फ कोशिश की और यह काम नहीं किया। मैंने इसका उपयोग सबसिस्टम को बदलने के लिए किया था mysqld, लेकिन जब मैंने इसे चलाया, तब भी इसने एक conhostउदाहरण दिया।
14

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