2009-10-09 8 views
11

मैं सी # .NET 2.0 का उपयोग कर रहा हूं। मुझे यह निर्धारित करने की ज़रूरत है कि कोई पीआईडी ​​मौजूद है या नहीं। मैं निम्नलिखित कोड के साथ आया:यह निर्धारित करने के लिए कि कोई प्रक्रिया आईडी मौजूद है

private bool ProcessExists(int iProcessID) 
{ 
    foreach (Process p in Process.GetProcesses()) 
    { 
     if (p.Id == iProcessID) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

क्या सभी प्रक्रियाओं को फिर से करने के अलावा ऐसा करने का कोई बेहतर तरीका है?

उत्तर

18

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

कहा जा रहा है कि, इस प्रकार का निर्धारण आपके कार्यक्रम के लिए पर्याप्त हो सकता है या नहीं भी हो सकता है। यह वास्तव में इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।

यहां आपके द्वारा लिखे गए कोड का एक संक्षिप्त संस्करण दिया गया है।

private bool ProcessExists(int id) { 
    return Process.GetProcesses().Any(x => x.Id == id); 
} 
2

System.Diagnostics.Process.GetProcessById(iProcessID) अगर प्रक्रिया मौजूद नहीं है तो ArgumentException फेंक देगा। हालांकि यह जांचने का सबसे अच्छा तरीका नहीं है कि प्रक्रिया मौजूद है या नहीं, लेकिन उम्मीद है कि यह वही है जो आप खोज रहे हैं।

+0

सुझाव के लिए धन्यवाद, लेकिन मानक अभ्यास के रूप में कुछ मूल्य को हल करने का प्रयास करते समय मैं आम तौर पर अपवादों को पकड़ने के खिलाफ गलती करता हूं। – Ken

+0

मैं सहमत हूं, लेकिन उम्मीद कर रहा था कि यह आपका प्रोग्राम क्या ढूंढ रहा था, यह जांचने का कोई कारण नहीं था कि कोई विशिष्ट प्रक्रिया आईडी जिंदा है या नहीं। –

6

यहां जोखिम भरा बात ये है: आपको उस प्रक्रिया आईडी कहां से मिली? यदि यह केवल एक संख्या है जिसे आपने कुछ समय पहले बचाया था, तो मूल प्रक्रिया की मृत्यु हो सकती थी और एक नई प्रक्रिया running with the same ID हो सकती है।

आप क्या करने की कोशिश कर रहे हैं? आपके वास्तविक लक्ष्य को प्राप्त करने का एक बेहतर तरीका हो सकता है।

+0

पीआईडी ​​विश्वसनीय है। यह एक दूसरे एप्लिकेशन का पीआईडी ​​है जो मेरा आवेदन लॉन्च करता है। मेरा आवेदन चल रहा है, जबकि दूसरा आवेदन हमेशा चलने की गारंटी है। (मेरा आवेदन अनिवार्य रूप से एक संवाद बॉक्स है जिसमें उसके माता-पिता के रूप में दूसरा आवेदन है।) इसके अलावा, फ्रैंकनस्टाइन के विवरण इस प्रश्न के लिए शामिल होने के लायक नहीं हैं। धन्यवाद। – Ken

+0

लेकिन आपका प्रश्न यह निर्धारित करने के बारे में है कि यह चल रहा है या नहीं। यदि यह चलने की गारंटी है, तो आपको जांच क्यों करनी है? –

+0

अच्छा बिंदु। यह एक सैनिटी चेक है यदि वास्तव में असाधारण मामला वास्तव में कुछ कारणों से होता है जो मेरे बाहर है। नमूना कोड वास्तव में क्या कर रहा है इसका बेहतर प्रतिनिधित्व करने के लिए मैं प्रश्न पाठ संपादित करूंगा। धन्यवाद। – Ken

संबंधित मुद्दे

 संबंधित मुद्दे