आपके बच्चे की प्रक्रियाएं मारे जा रही हैं। Defunct processes को zombie processes भी कहा जाता है; लाश मर गए हैं! एक ज़ोंबी प्रक्रिया प्रक्रिया तालिका में प्रवेश के अलावा कुछ भी नहीं है, इसमें कोई कोड या स्मृति नहीं है।
जब कोई प्रक्रिया मर जाती है (_exit
पर कॉल करके, या सिग्नल द्वारा मार डाला जाता है), तो इसे अपने माता-पिता द्वारा प्राप्त किया जाना चाहिए। प्रक्रिया तालिका में प्रवेश के अलावा प्रक्रिया द्वारा उपयोग किए जाने वाले प्रत्येक संसाधन गायब हो जाते हैं। माता-पिता को wait
या waitpid
पर कॉल करना होगा। एक बार माता-पिता को बाल प्रक्रिया की मृत्यु के बारे में अधिसूचित किया गया है, और उसके पास बच्चे की निकास स्थिति को पढ़ने का अवसर मिला है, तो प्रक्रिया तालिका में बच्चे की प्रविष्टि भी गायब हो जाती है: ज़ोंबी काटा जाता है।
यदि आप कभी भी अपने बच्चों की मृत्यु के बारे में अधिसूचित नहीं होना चाहते हैं, तो SIGCHLD
सिग्नल को अनदेखा करें; यह कर्नेल को बताता है कि आप अपने बच्चों के भाग्य को जानने में रुचि नहीं रखते हैं और ज़ोंबी स्वचालित रूप से काटा जाएगा।
signal(SIGCHLD, SIG_IGN)
आप केवल विशेष परिस्थितियों में अपने बच्चों की होने वाली मौतों की सूचना प्राप्त करना चाहते हैं, तो SA_NOCLDWAIT
ध्वज के साथ sigaction
कहते हैं। जब कोई बच्चा मर जाता है, यदि माता-पिता wait
कार्यों में से एक परिवार को निष्पादित कर रहा है, तो उसे बच्चे की मौत की अधिसूचना दी जाएगी और बाहर निकलने की स्थिति बताई जाएगी; अन्यथा बच्चे की निकास की स्थिति को त्याग दिया जाएगा।
struct sigaction sa;
sa.sa_handler = &my_sigchld_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_NOCLDWAIT;
sigaction(SIGCHLD, &sa, NULL);
उत्पादन के बारे में, अपने बच्चों को माता पिता के रूप में एक ही स्थानों पर लिख जब तक आप स्पष्ट रूप से उन्हें निर्देशित कर दिये गए हैं (close
और open
, या dup
, या अन्य संभावनाओं के एक नंबर के साथ)। आपके बच्चे मानक त्रुटि के लिए डायग्नोस्टिक संदेश प्रिंट कर रहे हैं (यही वह सब है, इसके बाद)।
./spawnbot >logging.txt 2>&1
इसके अलावा, के बाद से आप टर्मिनल से बच्चों को अलग करना चाहते करने लगते हैं, तो आप शायद यकीन है कि अगर आप टर्मिनल मारने वे एक SIGHUP प्राप्त नहीं होता है बनाना चाहते हैं। तो nohup
का उपयोग करें:
nohup ./spawnbot >logging.txt 2>&1 &
disown