बैश प्रलेखन उद्धृत (से man bash
):
JOB CONTROL
Job control refers to the ability to selectively stop
(suspend) the execution of processes and continue (resume)
their execution at a later point. A user typically employs
this facility via an interactive interface supplied jointly
by the operating system kernel's terminal driver and bash.
इसलिए, काफी सरल रूप से कहा गया है, set -m
(इंटरैक्टिव गोले के लिए डिफ़ॉल्ट) किसी को अंतर्निहित इन्स जैसे कि fg
और bg
, जो कि set +m
(गैर-संवादात्मक गोले के लिए डिफ़ॉल्ट) के तहत अक्षम किया जाएगा ।
यह मेरे लिए स्पष्ट नहीं है कि नौकरी नियंत्रण और बाहर निकलने पर पृष्ठभूमि प्रक्रियाओं को मारने के बीच क्या संबंध है, हालांकि, लेकिन मैं यह पुष्टि कर सकता हूं कि एक है: चल रही set -m; (sleep 10 ; touch control-on) &
फ़ाइल को बनाएगी यदि कोई उस कमांड को टाइप करने के बाद शेल को सही छोड़ता है, लेकिन set +m; (sleep 10 ; touch control-off) &
नहीं।
मुझे लगता है कि इसका उत्तर बाकी दस्तावेजों में निहित है set -m
:
-m Monitor mode. [...] Background pro‐
cesses run in a separate process group and a line con‐
taining their exit status is printed upon their comple‐
tion.
इसका मतलब यह है कि पृष्ठभूमि के तहत शुरू की गई नौकरियां set +m
वास्तविक "पृष्ठभूमि प्रक्रियाएं" नहीं हैं ("पृष्ठभूमि प्रक्रियाएं वे हैं जिनकी प्रक्रिया समूह आईडी टर्मिनल के" से भिन्न होती है): वे उसी प्रक्रिया समूह आईडी को साझा करते हैं जो कि शेल ने शुरू किया था, बल्कि उनके पास होने के बजाय उचित पृष्ठभूमि प्रक्रियाओं की तरह प्रक्रिया समूह। यह उस व्यवहार की व्याख्या करता है जब शेल अपनी पृष्ठभूमि की कुछ नौकरियों से पहले चलता है: यदि मैं सही ढंग से समझता हूं, तो छोड़ने के दौरान, शेल के रूप में उसी प्रक्रिया समूह में प्रक्रियाओं के लिए एक संकेत भेजा जाता है (इस तरह पृष्ठभूमि की नौकरियों को मारना शुरू हुआ set +m
), लेकिन नहीं अन्य प्रक्रिया समूहों में से एक (इस प्रकार अकेले सच पृष्ठभूमि प्रक्रियाओं को छोड़ना शुरू हुआ set -m
)।
तो, आपके मामले में, startup.sh
स्क्रिप्ट संभवतः पृष्ठभूमि की नौकरी शुरू करती है। जब यह स्क्रिप्ट गैर-अंतःक्रियात्मक रूप से चलाई जाती है, जैसे कि SSH से अधिक के रूप में जिस प्रश्न से आप जुड़े हैं, नौकरी पर नियंत्रण अक्षम है, "पृष्ठभूमि" नौकरी दूरस्थ शेल के प्रक्रिया समूह को साझा करती है, और इस तरह उस शेल के बाहर निकलते ही मारा जाता है। इसके विपरीत, उस शेल में जॉब कंट्रोल को सक्षम करके, बैकग्राउंड जॉब अपने स्वयं के प्रोसेस ग्रुप का अधिग्रहण करता है, और जब इसका मूल शेल बाहर निकलता है तो उसे नहीं मारा जाता है।
tomcat/bin/startup.sh
से कैसे संबंधित है ?fg
bg