2009-04-17 9 views
7

में माता-पिता की प्रक्रिया की मौत की जांच करने वाली बाल प्रक्रिया क्या पाइथन में बाल प्रक्रिया के लिए कोई तरीका है यह पता लगाने के लिए कि क्या माता-पिता की प्रक्रिया की मृत्यु हो गई है?पाइथन

उत्तर

1

आप अपनी प्रक्रिया में बहुत जल्दी अपनी मूल प्रक्रिया 'आईडी पढ़ने और फिर जांच कर सकते हैं, लेकिन निश्चित रूप से यह दौड़ की स्थिति के लिए प्रवण है। माता-पिता जो स्पॉन करते थे, तुरंत मर गए थे, और आपकी प्रक्रिया को पहले निर्देश को निष्पादित करने से पहले भी।

जब तक आपके पास एक सत्यापित पीआईडी ​​"अपेक्षित" माता-पिता को संदर्भित नहीं करता है, तो मुझे लगता है कि मुझे विश्वसनीय रूप से करना मुश्किल है।

3

यदि आपकी पाइथन प्रक्रिया लिनक्स के तहत चल रही है, और prctl() सिस्टम कॉल का खुलासा किया गया है, तो आप उत्तर here का उपयोग कर सकते हैं।

इससे माता-पिता की प्रक्रिया मरने पर बच्चे को सिग्नल भेजा जा सकता है।

1

मुझे इस उद्देश्य के लिए विशेष रूप से एक पाइप बनाने का एकमात्र विश्वसनीय तरीका है। बच्चे को बार-बार पाइप से पढ़ने की कोशिश करनी होगी, अधिमानतः एक गैर-अवरुद्ध फैशन में, या चयन का उपयोग करना। पाइप अब अस्तित्व में नहीं है (संभवतः माता-पिता की मृत्यु के कारण) यह एक त्रुटि प्राप्त होगी।

1

माता पिता मान लिया जाये कि आप देख सकते हैं कि यह अभी भी इस तरह के रूप में एक व्यस्त पाश में जीवित है, psutil का उपयोग करके जब आप ऐसा करने के लिए शुरू करते हैं जीवित है,:

import psutil, os, time 
me = psutil.Process(os.getpid()) 
while 1: 
    if me.parent is not None: 
     # still alive 
     time.sleep(0.1) 
     continue 
    else: 
     print "my parent is gone" 

नहीं बहुत अच्छा है लेकिन ...