Thursday, 15 March 2012

python - os.kill not raising an OSError, however I do not see the given pid running -


मेरे उबुंटू सर्वर पर मैं निम्न कमांड चलाता हूं:

  अजगर -सी 'आयात ओएस ; Os.kill (5555, 0) ' 

यह किया जाता है ताकि मैं देख सकूं कि क्या पंड 5555 चल रहा है। मेरी समझ से यह एक OSError को उठाना चाहिए अगर pid नहीं चल रहा है। यह मेरे लिए OSError नहीं बढ़ा रहा है जिसका अर्थ है कि यह एक चलने वाली प्रक्रिया होनी चाहिए। हालांकि जब मैं चलाता हूं:

  ps aux | | Grep 5555  

मुझे लगता है कि उस pid के साथ चलने की कोई प्रक्रिया नहीं है। यह सामान्य श्रेणी में कई अन्य पिक्स पर भी होता है, लेकिन यह 555 या 55555 के साथ नहीं होता है।

क्या किसी के पास कोई जानकारी है कि क्यों os.kill एक OSError नहीं उठाएगी जैसे कि यह अपेक्षित है

नोट: यह अजगर 2.5.1 के तहत चल रहा है।

के अंतर्गत लिनक्स, प्रत्येक प्रसंस्करण और प्रत्येक थ्रेड में एक अलग पिन होता है os.kill पर ध्यान नहीं है कि आपके पास कोई धागा पुड है या कोई कार्य pid है, हालांकि ps आमतौर पर धागा पाइड्स नहीं दिखाता है।

उदाहरण के लिए, मेरे मशीन पर पीआईडी ​​8502 के साथ प्रक्रिया चल रहा है धागे जो आप इस तरह देख सकते हैं

  $ ls / proc / 8502 / task / 8502 8503 8504 8505 8506 8507 8511 8512 8514 865 9 < / कोड>  

ध्यान दें कि 8503 प्रक्रिया सूची में दिखाई नहीं देता

  $ ps aux | Grep [8] 503 $  

हालांकि कुछ और ps तर्कों का उपयोग करके आप इसे देख सकते हैं

  $ ps-eLf | Grep [8] 503 एनसीडब्ल्यू 8502 1 8503 0 10 10:00? 00:00:00 / usr / lib / virtualbox / vboxsvc --automatic  

( के लिए grepping [8] 503 का अर्थ है कि grep दिखाई नहीं देगा - यह एक पुरानी यूनिक्स चाल है!)

अब देखते हैं कि यह जीवित है या नहीं

  $ python Python 2.6.4 (r264: 75706, 2 नवंबर 2009, 14:44:17) [जीसीसी 4.4.1] लिनक्स 2 पर अधिक जानकारी के लिए टाइप "सहायता", "कॉपीराइट", "क्रेडिट" या "लाइसेंस" '/home/ncw/.pystartup' से लोड किए गए कस्टमियां & gt; & gt; & gt; आयात ओएस & gt; & gt; & gt; Os.kill (8503, 0) & gt; & gt; & gt;  

यह आपकी समस्या का डुप्लिकेट करता है।

मुझे लगता है कि अगर आप करते हैं

  ls / proc / * / task / 5555  

या

  ps-elf | Grep [5] 555  

आप अपराधी धागा देखेंगे।


No comments:

Post a Comment