daemon - does bash -c work like nohup? -
redhat में एक पुरानी इंटिस्क्रिप्ट के साथ काम करते समय, मैं
ऐसा लगता है कि इसमें संदेह होना चाहिए यह नोहूप का उपयोग नहीं करता है हालांकि, कार्यक्रम सही ढंग से काम करता है, और नियंत्रित टर्मिनल से बाहर निकल जाने पर भी चलती रहती है। आगे की जांच करते हुए मुझे पता चला कि जैसे- तो मेरा सवाल है, क्या यह व्यवहार अच्छी तरह से जाना जाता है? यही है, क्या मैं इसे अपने init स्क्रिप्ट में उपयोग कर सकते हैं, बजाय nohup? या यह बाश में एक बग है? यह मेरी जिज्ञासा को खारिज करती है: क्या SIGHUP व्यवहार करता है जैसे कि ये होता है? पहला संकेत, huponexit पर बाश मैन पेज से आता है, यदि एक इंटरेक्टिव पर बैश सभी नौकरियों को SIGHUP भेज देगी लॉगिन शेल निकल जाता है। एक वेनिला उबंटू 12.04 स्थापना पर, एक इंटरैक्टिव सत्र के लिए "बंद" के लिए हूपोनएक्सिट डिफ़ॉल्ट। एक अनुभववादी होने के नाते, मैं इसे कार्रवाई में देखना चाहता था: यहां तक कि stdin और stdout को एक tty तक बाध्य किया गया है, यह शेल निकास पर एक संकेत प्राप्त नहीं करता है, जो दस्तावेज़ीकरण से सहमत है। अपेक्षित रूप में, प्रक्रिया init का बच्चा बन जाता है, और पीटीआई के कनेक्शन बंद हो जाते हैं। इसके डिफ़ॉल्ट से देखते हुए, SIGHUP को इंटरैक्टिव सत्रों को मारने के लिए "दिलचस्प" नहीं माना जाता है। हालांकि, जैसे ही आप इस पर निर्भर करते हैं, आपको एक प्रति-उदाहरण मिलेगा, जो संभवत: सबसे खराब समय पर होने की संभावना है। डेमन --यूज़र $ USER --पैडफाइल $ PIDFILE "सीएमडी & gt; & gt; /var/log/cmd.log 2 & gt; और 1 & amp;"
bash -c 'सो 1000 और amp;' ऐसा लगता है कि अगर टर्मिनल जिसे इसे लागू किया जाता है तो बाहर निकल जाता है (जो बिना किसी प्रकार के संभव होनी चाहिए)। मैंने इस व्यवहार को नवीनतम उबुन्टू के साथ सत्यापित किया है।
shopt :
#include & lt; stdio.h & gt; # शामिल करें & lt; stdlib.h & gt; # शामिल करें & lt; signal.h & gt; # शामिल करें & lt; unistd.h & gt; शून्य hupped (int i) {fprintf (stderr, "प्राप्त SIGHUP 0x% x \ n", i); बाहर निकलने के (1); } Int main (int argc, char * argv []) {fprintf (stderr, "पीआईडी% d \ n", getpid ()) के लिए SIGHUP हैंडलर पंजीकृत करना; संकेत (SIGHUP, एचप्ड); नींद (3600 * 5); वापसी 0; }
Comments
Post a Comment