क्या गारंटी है कि विंडोज पर प्रक्रिया आईडी का उपयोग निश्चित समय के भीतर पुन: उपयोग नहीं किया जाएगा


0

मेरे पास एक स्क्रिप्ट है जो मल्टीटपल प्रक्रियाओं को जन्म देती है और फिर उनकी प्रक्रिया आईडी के माध्यम से उन पर नज़र रखती है, मैं नहीं चाहूंगा कि एक बंद हो और फिर उस समय के भीतर एक और प्रक्रिया लेने के लिए जो मैं जाँच कर रहा हूं। क्या कोई गारंटी है? अब तक, मैंने पाया है कि कोई भी वास्तव में नहीं जानता है कि जब वे यादृच्छिक होते हैं या नहीं तो उनका पुन: उपयोग किया जाता है।


तब आप अपनी 'कुंजी' के रूप में कुछ और अनोखा चाहते हैं ... उदाहरण के लिए, आप प्रॉसीड, प्रोग्राम का नाम, और लगातार डेटा का एक और टुकड़ा और संभवतः हैश के साथ एक और अधिक विशिष्ट हैंडल पाने के लिए हैश कर सकते हैं
— ब्रायन एडकिंस

हाँ, प्रोग्राम के नाम का उपयोग करना एक तरीका है, इसे और भी अधिक एकल करना, अगर किसी चीज़ को निष्पादित किया गया था और उस हैंडल को पकड़ लिया था जिसे मैं बंद करने के एक सेकंड के भीतर ट्रैक कर रहा था, कम से कम नाम की जाँच से चीजों को मदद मिलेगी, हालांकि सही नहीं।
— छोड़ें

जवाबों:


1

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

यदि आप इसके बारे में सोचते हैं, तो यह समझ में आता है, क्योंकि जब तक प्रक्रिया को संभालना बाकी है, तब तक कोई व्यक्ति WaitForSingleObject को प्रक्रिया से बाहर निकलने का इंतजार कर सकता है, या वे एक्ज़िट कोड प्राप्त करने के लिए GetExitCodeProcess को कॉल कर सकते हैं, और वह निकास कोड बाद में पुनः प्राप्ति के लिए कहीं संग्रहीत किया जाना है।

जब सभी हैंडल बंद हो जाते हैं, तो कर्नेल जानता है कि कोई यह पूछने वाला नहीं है कि प्रक्रिया अभी भी चल रही है या उसका एक्जिट कोड क्या है (क्योंकि आपको उन सवालों को पूछने के लिए हैंडल की आवश्यकता है)। जिस बिंदु पर प्रक्रिया ऑब्जेक्ट को नष्ट किया जा सकता है, जो बदले में प्रक्रिया आईडी को नष्ट कर देता है।

यदि कोई OpenProcess को किसी ज़ोंबी प्रक्रिया पर कहता है तो क्या होता है? एक ही बात यह है कि अगर वे इसे एक चल रही प्रक्रिया पर कहते हैं: वे इस प्रक्रिया को संभालते हैं। आप एक ज़ोंबी प्रक्रिया को क्यों संभालना चाहते हैं? ठीक है, आप नहीं जानते होंगे कि यह अभी तक एक ज़ोंबी है; आप संभाल रहे हैं ताकि आप WaitForSingleObject को कॉल कर सकें, यह देखने के लिए कि क्या यह अभी तक बाहर निकल गया है। या हो सकता है कि आपको एक हैंडल मिल जाए, यह जानकर कि यह एक ज़ोंबी है, क्योंकि आप गेटएक्सिटकोडप्रोसेस को यह देखना चाहते हैं कि बाहर निकलने का तरीका क्या था।

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