मेरे पास एक सी ++ प्रोग्राम है जो दूसरों पर निगरानी रखता है। अगर यह पता चलता है कि एक प्रक्रिया अब नहीं चल रही है, तो यह system
के माध्यम से इसे पुनरारंभ करता है। समस्या यह है कि, अगर मैं वॉचडॉग प्रक्रिया को मारता हूं, तो जिस प्रक्रिया को शुरू किया गया है वह भी मर जाता है।बाल प्रक्रियाओं को कैसे बढ़ाया जाए जो माता-पिता के साथ मर नहीं जाते?
void* ProcessWatchdog::worker(void* arg)
{
//Check if process is running
if(!processRunning)
system("processName /path/to/processConfig.xml &");
}
नई बाल प्रक्रिया सही ढंग से शुरू हो जाती है, और बिना किसी समस्या के चलती है। लेकिन जब माता-पिता (अब यह ProcessWatchdog
प्रक्रिया) मर जाता है, तो बच्चा भी मर जाता है। मैं एक बच्चे की प्रक्रिया कैसे उत्पन्न कर सकता हूं जो माता-पिता से पूरी तरह से स्वतंत्र है?
मैंने pclose
और popen
, प्रक्रिया शुरू करने वाली शैल स्क्रिप्ट चलाने और कुछ अन्य रणनीतियों का उपयोग करने का प्रयास किया है, लेकिन इसका कोई फायदा नहीं हुआ है। मैं बाल प्रक्रियाओं में SIGHUP
संकेतों को अनदेखा कर रहा हूं, लेकिन वे अभी भी मर जाते हैं।
तो आदर्श रूप में, मैं सिस्टम को ऐसी प्रक्रिया शुरू करने के लिए कहूंगा जो पूरी तरह से माता-पिता से स्वतंत्र है। मैं बच्चे के साथ समाप्त होने के लिए बच्चे के trace
चाहता हूं, और इसके लिए/सिस्टम को यह नहीं पता कि ProcessWatchdog
इसे पहले स्थान पर शुरू कर दिया है।
क्या ऐसा कोई तरीका है जिससे मैं ऐसा कर सकता हूं?
मैं इसे लिनक्स पर सी ++ में लिख रहा हूं।
संभावित डुप्लिकेट [सिस्टम के साथ उत्पन्न होने वाली बाल प्रक्रिया() को माता-पिता को मारने के सिग्नल और निकास के बाद चलते रहें] (http://stackoverflow.com/questions/12945189/make-child- प्रक्रिया-स्पॉन्डेड-साथ-सिस्टम-रख-चलने-बाद-माता-पिता-हो-मार-सिग) –
मुझे नहीं लगता कि सिस्टम का उपयोग करना एक अच्छा विचार है .... – Alexis
सिस्टम का उपयोग क्यों नहीं करना एक अच्छा विचार है? स्पष्ट सुरक्षा मुद्दों के अलावा? मैं इसे एक बहुत ही नियंत्रित वातावरण में एक एम्बेडेड सिस्टम पर कर रहा हूं, और मैं गलत सिस्टम कॉल के बारे में चिंतित नहीं हूं। क्या कोई और कारण है कि मुझे सावधान रहना चाहिए? सुरक्षा समस्याओं के लिए –