पृष्ठभूमि प्रक्रियाओं का शुभारंभ और प्रसंस्करण: कार्य प्रबंधन। प्रक्रियाएं और कार्य प्रबंधन लिनक्स पृष्ठभूमि में एक कमांड चलाना

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

लॉन्च और प्रोसेसिंग पृष्ठभूमि प्रक्रियाएं: कार्य प्रबंधन

आपने देखा होगा कि कमांड दर्ज करने के बादटर्मिनल "ई, आमतौर पर आपको इसके ख़त्म होने तक इंतज़ार करना पड़ता हैशंख आपको नियंत्रण वापस दे देगा. इसका मतलब है कि आपने कमांड को अंदर चलायाप्राथमिकता मोड . हालाँकि, ऐसे समय होते हैं जब यह वांछनीय नहीं होता है।

उदाहरण के लिए, मान लें कि आप एक बड़ी निर्देशिका को दूसरे में पुनरावर्ती रूप से कॉपी करने का निर्णय लेते हैं। आपने त्रुटियों को अनदेखा करना भी चुना है, इसलिए आपने त्रुटि चैनल को पुनर्निर्देशित कर दिया है/देव/शून्य :

सीपी -आर छवियां/ /साझा/ 2>/dev/null

इस आदेश को पूरा होने में कई मिनट लग सकते हैं. आपके पास दो समाधान हैं: पहला क्रूर है, जिसका अर्थ है आदेश को रोकना (मारना), और फिर इसे फिर से निष्पादित करना, लेकिन अधिक उपयुक्त समय पर। ऐसा करने के लिए, क्लिक करें Ctrl+सी : इससे प्रक्रिया समाप्त हो जाएगी और आपको प्रॉम्प्ट पर वापस ले जाया जाएगा। लेकिन रुकिए, अभी ऐसा मत कीजिए! पढ़ते रहिये।

मान लीजिए कि आप कुछ और करते समय एक कमांड निष्पादित करना चाहते हैं। समाधान यह होगा कि इस प्रक्रिया को चलाया जाएपृष्ठभूमि . ऐसा करने के लिए, क्लिक करें Ctrl+z प्रक्रिया को रोकने के लिए:

इस मामले में, प्रक्रिया अपना काम जारी रखेगी, लेकिन एक पृष्ठभूमि कार्य के रूप में, जैसा कि संकेत द्वारा दर्शाया गया है & (एम्परसेंड) पंक्ति के अंत में। फिर आपको प्रॉम्प्ट पर वापस ले जाया जाएगा और आप काम करना जारी रख सकते हैं। एक प्रक्रिया जो पृष्ठभूमि कार्य के रूप में या अंदर चलती है पृष्ठभूमि, पृष्ठभूमि कहा जाता हैकाम .

बेशक, आप साइन जोड़कर तुरंत प्रक्रियाओं को पृष्ठभूमि कार्यों के रूप में चला सकते हैं & आदेश के अंत में. उदाहरण के लिए, आप टाइप करके बैकग्राउंड में डायरेक्टरी कॉपी कमांड चला सकते हैं:

सीपी -आर छवियां/ /साझा/ 2>/देव/शून्य और

आप चाहें तो इस प्रक्रिया को अग्रभूमि में पुनर्स्थापित भी कर सकते हैं और टाइप करके इसके पूरा होने की प्रतीक्षा कर सकते हैंएफजी (अग्रभूमि - प्राथमिकता)। इसे पृष्ठभूमि में वापस लाने के लिए, निम्नलिखित क्रम दर्ज करें Ctrl+z , बीजी .

इस तरह, आप कई कार्य चला सकते हैं: प्रत्येक कमांड को एक कार्य संख्या सौंपी जाएगी। टीमशैल "ए नौकरियां वर्तमान से संबंधित सभी नौकरियों की सूची प्रदर्शित करता हैशंख ॐ कार्य से पहले एक संकेत होता है + , पृष्ठभूमि में चल रही अंतिम प्रक्रिया को चिह्नित करना। किसी विशिष्ट कार्य को प्राथमिकता मोड में पुनर्स्थापित करने के लिए, आप कमांड दर्ज कर सकते हैंएफजी , कहाँ - कार्य संख्या, उदाहरण के लिए,एफजी 5 .

लिनक्स टर्मिनल सेवा डिफ़ॉल्ट रूप से सिंगल-टास्किंग मोड में चलती है। इसका मतलब यह है कि लॉन्च किया गया कोई भी क्रू टर्मिनल को तब तक ब्लॉक कर देता है जब तक कि उसका काम पूरा न हो जाए। लंबे निष्पादन समय की आवश्यकता वाले प्रोग्राम चलाते समय यह दृष्टिकोण सुविधाजनक नहीं है। इस समस्यादो तरीकों से हल किया जा सकता है: खुला अतिरिक्त विंडोटर्मिनल खोलें और उसमें कोई अन्य कमांड चलाएँ या पृष्ठभूमि का उपयोग करें। लिनक्स सहित सभी मौजूदा ऑपरेटिंग सिस्टम मल्टीटास्किंग हैं, जिसका अर्थ है एक साथ कई प्रोग्राम निष्पादित करने की क्षमता।

इंटरफ़ेस तक तुरंत पहुंचने के लिए पृष्ठभूमि में ब्रिगेड कैसे चलाएं कमांड लाइन? जिस दल को चलने के लिए बाध्य किया गया है उसे पृष्ठभूमि प्रक्रिया कहा जाता है। पृष्ठभूमि प्रक्रियाएँ स्क्रीन पर नहीं दिखाई जातीं। उदाहरण के लिए, अपाचे HTTPD सर्वर वेब पेजों की सेवा के लिए पृष्ठभूमि में चलता है। आप शेल स्क्रिप्ट या किसी कमांड को कम प्राथमिकता मोड में डाल सकते हैं। किसी कार्य (उदाहरण के लिए, एक टीम या स्क्रिप्ट) को कमांड लाइन के अंत में "&" जोड़कर पृष्ठभूमि में रखा जा सकता है। यह कथन कमांड को पृष्ठभूमि में रखता है और टर्मिनल में स्थान खाली करता है। पृष्ठभूमि में चलने वाली टीम को कार्य कहा जाता है। जबकि बैकग्राउंड कमांड चल रहा है, किसी अन्य कमांड को निष्पादित करना संभव है। वाक्यविन्यास इस प्रकार है:

कमांड और स्क्रिप्ट-नाम और /पथ/से/कमांड arg1 arg2 और कमांड-1 | कमांड-2 arg1 और कमांड-1 | कमांड-2 -arg1 -arg2 >/पथ/से/आउटपुट और

टर्मिनल विंडो को अवरुद्ध किए बिना पृष्ठभूमि में प्रोग्राम चलाने के लिए, आपको विशेष "&" प्रशिक्षक का उपयोग करना होगा। कमांड नाम, विकल्प और इनपुट पैरामीटर निर्दिष्ट करने के बाद इस अक्षर को पंक्ति के बिल्कुल अंत में रखें। में सामान्य रूप से देखेंइस क्रम को "कमांड_नाम -ऑप्शन इनपुट_पैरामीटर &" के रूप में दर्ज किया जा सकता है।

ls ~/* > ~/test-file.txt &
18960

एंटर बटन दबाने के बाद प्रोग्राम अपने आप बैकग्राउंड में शुरू हो जाएगा। इस स्थिति में, टर्मिनल निम्नलिखित सामग्री "[टास्क_नंबर] प्रोसेस_आइडेंटिफ़ायर" के साथ एक पंक्ति प्रदर्शित करेगा और आपको एक नया कमांड दर्ज करने के लिए संकेत देगा।

लिनक्स में पृष्ठभूमि में चल रहे कमांड खोजें

निम्न आदेश चलाएँ:

डेटा आउटपुट का उदाहरण:

रनिंग फाइंड / -iname "*.c" 2> /dev/null > /tmp/output.txt &
+ चल रहा है grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

ऑर्डर पहचानकर्ता कहां हैं.

मानक कास्ट के अतिरिक्त जॉब आईडी के लिए प्रक्रिया आईडी प्रदर्शित करने के लिए, -l विकल्प पास करें:

डेटा आउटपुट का उदाहरण:

7307 रनिंग फाइंड / -iname "*.c" 2> /dev/null > /tmp/output.txt &
+ 7324 चल रहा है grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

केवल प्रक्रिया आईडी प्रदर्शित करने के लिए, दर्ज करें:

डेटा आउटपुट का उदाहरण:

पृष्ठभूमि में चल रहे आदेशों को निष्पादित करना बंद करें

किसी प्रक्रिया को बलपूर्वक या शालीनता से समाप्त करने के लिए, किल कमांड का उपयोग करें। वाक्यविन्यास इस प्रकार है:

पीआईडी ​​को मार डालो
मारो -15 पीआईडी
मारो -9 पीआईडी
किलऑल प्रक्रिया-नाम-यहां
किलऑल -15 प्रक्रिया-नाम-यहां
किलऑल -9 प्रक्रिया-नाम-यहां

लिनक्स में किसी प्रोग्राम को फोरग्राउंड मोड पर लौटाना

लिनक्स आपको न केवल पृष्ठभूमि में प्रोग्राम चलाने की अनुमति देता है, बल्कि यदि आप चाहें तो उन्हें सामान्य निष्पादन में वापस लाने की भी अनुमति देता है। इसके लिए दो उपकरण हैं: कमांड ( एक टीम सामान्य उद्देश्यों और हितों से एकजुट लोगों का एक समूह है।) एफजी और % ऑपरेटर। उनके प्रयास का सिद्धांत अत्यंत सरल है। एफजी को पैरामीटर के रूप में कार्य संख्या निर्दिष्ट करने की आवश्यकता होती है, और इसे बिना रिक्त स्थान वाले ऑपरेटर के तुरंत बाद % के लिए प्रतिस्थापित किया जाना चाहिए।

ढूंढें / -नाम .ini 2> ~/results.txt &
19090
एफजी 1
बैश: एफजी: कार्य समाप्त हुआ
+ बाहर निकलें 1 ढूंढें / -नाम .ini 2> ~/results.txt

अनिवार्य रूप से, ऑपरेटिंग सिस्टम में एक कर्नेल और प्रोग्रामों का एक विशाल समूह होता है जो विभिन्न कार्यों को करने, सिस्टम को बनाए रखने और उपयोगकर्ता की जरूरतों को पूरा करने के लिए डिज़ाइन किया गया है। लगभग सभी उपयोगकर्ता इंटरैक्शन और ऑपरेटिंग सिस्टमकार्यक्रमों का उपयोग करके प्रदर्शन किया गया। इसलिए, शुरुआती लोगों के लिए यह समझना महत्वपूर्ण है कि लिनक्स पर प्रोग्राम कैसे चलाया जाए, स्टार्टअप के दौरान क्या होता है और लॉन्च के तरीके क्या हैं।

इससे पहले कि हम प्रोग्राम लॉन्च करने के लिए आगे बढ़ें, हमें पहले यह समझना होगा कि प्रोग्राम क्या है। लिनक्स में, प्रोग्राम अन्य फ़ाइलों से केवल इस मायने में भिन्न होते हैं कि उनमें एक निष्पादन योग्य ध्वज सेट होता है। इसके बारे में मैं पहले ही लेख में विस्तार से लिख चुका हूं, इसलिए इसे नहीं दोहराऊंगा।

सभी कार्यक्रमों को कई प्रकारों में विभाजित किया जा सकता है:

  • बाइनरी प्रोग्राम- प्रोसेसर के लिए निर्देश होते हैं जो निष्पादन के लिए तैयार होते हैं, अधिकांश प्रोग्राम इस प्रारूप में होते हैं, वे तेज़ होते हैं और सिस्टम द्वारा तुरंत निष्पादित होते हैं;
  • बाइटकोड प्रोग्राम- ये अब प्रोसेसर निर्देश नहीं हैं, बल्कि एक विशिष्ट वर्चुअल मशीन के निर्देश हैं जो इन्हें वर्चुअल मशीन के बिना निष्पादित कर सकते हैं, ऐसे कमांड निष्पादित नहीं किए जा सकते हैं; ऐसे कार्यक्रम अधिक संसाधनों का उपभोग करते हैं, लेकिन काफी तेज़ भी होते हैं, उनका लाभ यह है कि उन्हें बिना किसी संशोधन के कहीं भी कार्यान्वित किया जा सकता है आभासी मशीन. ऐसे प्रोग्रामों में जावा प्रोग्राम शामिल हैं।
  • स्क्रिप्ट प्रोग्राम- इन प्रोग्रामों में सादे पाठ में कमांड का एक सेट होता है जिसे एक विशेष दुभाषिया द्वारा निष्पादित किया जाता है। ऐसे प्रोग्राम धीमे होते हैं, लेकिन उन्हें विकसित करना आसान होता है और उनके कोड को आसानी से और जल्दी से बदला जा सकता है।

अब चलिए प्रोग्राम लॉन्च करने की ओर बढ़ते हैं।

टर्मिनल में प्रोग्राम चलाना

प्रारंभ में, यूनिक्स और लिनक्स ऑपरेटिंग सिस्टम में ग्राफिकल इंटरफ़ेस नहीं था, इसलिए टर्मिनल से कमांड का उपयोग करके प्रोग्राम लॉन्च किए गए थे। अब यह भी संभव है और अनुभवी उपयोगकर्ताओं द्वारा काफी सक्रिय रूप से उपयोग किया जाता है। प्रोग्राम लॉन्च सिंटैक्स इस तरह दिखता है:

/पथ/से/फ़ाइल/प्रोग्रामविकल्प

पैरामीटर केवल तभी निर्दिष्ट किए जाते हैं जब उनकी आवश्यकता होती है, लेकिन शेल को हमेशा प्रोग्राम का पूरा पथ पता होना चाहिए। प्रोग्राम नाम और स्पेस के बाद सब कुछ पैरामीटर हैं। आपने शायद पहले ही देखा होगा कि प्रोग्राम निष्पादित करते समय हम आमतौर पर पूरा पथ निर्दिष्ट नहीं करते हैं। यह बहुत लंबा और असुविधाजनक होगा.

डेवलपर्स एक समाधान लेकर आए हैं। एक PATH वैरिएबल बनाया गया था, जो उन फ़ोल्डरों के सभी पथों को संग्रहीत करता है जहां प्रोग्राम आमतौर पर स्थित होते हैं - /bin, /sbin, /usr/bin, /usr/sbin इत्यादि। आप इसकी सामग्री को कमांड से देख सकते हैं:

जब आप किसी प्रोग्राम का नाम टाइप करते हैं, तो सिस्टम PATH के सभी फ़ोल्डरों में उस नाम के साथ एक निष्पादन योग्य फ़ाइल की खोज करता है और यदि उसे यह मिल जाती है, तो यह इसे निष्पादित करता है। यदि ऐसी कोई फ़ाइल नहीं है, तो एक संदेश प्रदर्शित होता है - कमांड नहीं मिला. तो, एक को चलाने के लिए सिस्टम प्रोग्रामउदाहरण के लिए, बस इसकी निष्पादन योग्य फ़ाइल का नाम टाइप करें:

और आप एक स्पेस के बाद पैरामीटर पास कर सकते हैं:

जब प्रोग्राम इन निर्देशिकाओं में नहीं है, तो आपको इसका पूरा पथ निर्दिष्ट करना होगा:

/usr/local/bin/ls1

यदि आप प्रोग्राम को इसके माध्यम से चलाना चाहते हैं उबंटू टर्मिनल, जो वर्तमान फ़ोल्डर में स्थित है, तो स्थिति थोड़ी भिन्न होगी। सिस्टम केवल PATH वैरिएबल में फ़ोल्डरों को खोजता है; यह वर्तमान निर्देशिका को नहीं खोजता है। इसलिए, यदि आप निष्पादन योग्य फ़ाइल का नाम टाइप करते हैं, तो आपको एक त्रुटि मिलेगी। आपको पूरा पथ निर्दिष्ट करने की आवश्यकता है, जैसा कि आपको याद होगा।/:

कभी-कभी कुछ विशेष को स्थानांतरित करना आवश्यक हो जाता है। उदाहरण के लिए, EDITOR वेरिएबल इंगित करता है कि कौन सा पाठ संपादकडिफ़ॉल्ट के रूप में उपयोग किया जाना चाहिए। आप सिंटैक्स का उपयोग करके कमांड नाम से पहले एक वैरिएबल नाम और उसका मान निर्दिष्ट कर सकते हैं:

वेरिएबल_नाम = वैल्यू कमांड

उदाहरण के लिए:

संपादक=नैनो विसुडो

डिफ़ॉल्ट रूप से, यह कमांड विम संपादक में सेटिंग्स खोलता है, लेकिन इसके साथ पर्यावरणपरिवर्ती तारकसेटिंग्स नैनो एडिटर में खुल जाएंगी।

किसी अन्य उपयोगकर्ता के रूप में प्रोग्राम चलाना

आप पहले से ही जानते हैं कि प्रोग्राम को कैसे चलाना है लिनक्स टर्मिनल, अन्य उपयोगकर्ताओं के बारे में क्या? विंडोज़ में, प्रोग्राम को व्यवस्थापक के रूप में चलाना काफी आम है ताकि प्रोग्राम सिस्टम में अधिक एक्सेस अधिकार प्राप्त कर सके। Linux पर, इसके लिए sudo उपयोगिता का उपयोग किया जाता है। उसका नाम इस प्रकार समझा जा सकता है एसचुड़ैल यूएसईआर करना- उपयोगकर्ता बदलें और निष्पादित करें। डिफ़ॉल्ट रूप से, उपयोगिता कमांड को रूट सुपरयूज़र के रूप में चलाती है:

सुडो कमांड
सुडो हूआमी

लेकिन -u विकल्प का उपयोग करके, आप प्रोग्राम को सिस्टम में लॉग इन किए गए किसी भी उपयोगकर्ता की तरह चला सकते हैं:

sudo -u उपयोगकर्ता नाम आदेश
सुडो-यू पोस्टग्रेज हूअमी

whoami (मैं कौन हूं) कमांड वर्तमान उपयोगकर्ता का नाम प्रदर्शित करता है।

किसी प्रोग्राम को बैकग्राउंड में कैसे चलाएं

कभी-कभी टर्मिनल में लंबे समय तक चलने वाले प्रोग्राम को चलाना आवश्यक हो जाता है ताकि यह आगे के काम में हस्तक्षेप न करे। ऐसा करने के लिए, आप Linux पर पृष्ठभूमि में प्रोग्राम चलाने का उपयोग कर सकते हैं:

कार्यक्रम का नाम &

उदाहरण के लिए:

dd if=/dev/शून्य of=~/फ़ाइल गिनती=100000 &

सिस्टम पीआईडी, प्रोग्राम के विशिष्ट पहचानकर्ता को आउटपुट करेगा, जिसे आप इसे बंद करने के लिए उपयोग कर सकते हैं:

Linux पर स्क्रिप्ट कैसे चलाएँ

हम पहले ही कह चुके हैं कि प्रोग्रामों को बाइनरी में विभाजित किया जाता है और उनकी व्याख्या की जाती है। पहले, हम केवल बाइनरी प्रोग्राम के बारे में बात करते थे। व्याख्या किए गए कार्यक्रमों को चलाने के लिए, आपको सीधे एक दुभाषिया की आवश्यकता होती है; ऐसे कार्यक्रमों में जावा, पायथन, पर्ल, रूबी, पीएचपी, नोडजेएस और कई अन्य भाषाओं में लिखे गए कार्यक्रम शामिल हैं। ऐसे प्रोग्राम को लॉन्च करने का सिंटैक्स अलग है:

दुभाषिया /पथ/से/फ़ाइल/प्रोग्रामविकल्प

अलग-अलग दुभाषिए अलग-अलग व्यवहार करते हैं, इसलिए प्रोग्राम का पूरा पथ तुरंत निर्दिष्ट करना बेहतर है। पायथन आमतौर पर पूर्ण पथ निर्दिष्ट किए बिना वर्तमान फ़ोल्डर से स्क्रिप्ट उठाता है:

पायथन hellowrld.py

और जावा प्रोग्राम को इस तरह लॉन्च करने की आवश्यकता है:

जावा -जार प्रोग्राम.जर

व्याख्या की गई प्रोग्राम फ़ाइलों के लिए, निष्पादन योग्यता ध्वज वैकल्पिक है, क्योंकि उन्हें मुख्य प्रोग्राम के पैरामीटर के रूप में पारित किया जाता है। केवल बैश स्क्रिप्टएक अपवाद हैं. आप दुभाषिया के साथ स्क्रिप्ट चला सकते हैं:

या बस स्क्रिप्ट का पथ टाइप करें:

शेल स्वयं निष्पादन योग्यता ध्वज द्वारा अपनी स्क्रिप्ट निर्धारित करता है और उन्हें निष्पादित करता है। यदि निष्पादन योग्यता ध्वज सेट नहीं है, तो आपको इसे जोड़ना चाहिए:

sudo chmod u+x ./script.sh

इसलिए, अधिकांश व्याख्या किए गए कार्यक्रमों के लिए, सरल एसएच स्क्रिप्ट बनाई गई हैं जिन्हें तुरंत लॉन्च किया जा सकता है।

GUI में लिनक्स प्रोग्राम चलाना

के माध्यम से प्रोग्राम लॉन्च करना कहीं अधिक सुविधाजनक है जीयूआई. यदि इस तरह से कंसोल प्रोग्राम लॉन्च करना असंभव है, तो सभी ग्राफिकल उपयोगिताओं के लिए शॉर्टकट हैं जिन्हें आप सिस्टम के मुख्य मेनू में पा सकते हैं:

इसके अलावा, आप माउस पर डबल-क्लिक करके प्रोग्राम को फ़ाइल मैनेजर से चला सकते हैं, लेकिन फिर इसके लिए निष्पादन क्षमता ध्वज सेट होना चाहिए।

GUI में स्क्रिप्ट चलाना उसी तरह काम करता है। आप सभी मेनू शॉर्टकट /usr/share/applications/ निर्देशिका में पा सकते हैं। यहां से डबल क्लिक करके कोई भी प्रोग्राम लॉन्च किया जा सकता है। लेकिन आइए देखें कि शॉर्टकट के अंदर क्या है; ऐसा करने के लिए, इसे टेक्स्ट एडिटर में खोलें:


अन्य बातों के अलावा, Exec लाइन चलने वाले कमांड को निर्दिष्ट करती है लिनक्स प्रोग्रामजब आप किसी शॉर्टकट पर डबल क्लिक करते हैं। आप मौजूदा शॉर्टकट में से एक ले सकते हैं और उसके आधार पर अपना खुद का शॉर्टकट बना सकते हैं। यह तो बस प्रोग्राम का नाम है. लेकिन यह ध्यान रखना महत्वपूर्ण है कि शॉर्टकट, स्क्रिप्ट, क्रॉन इत्यादि जैसी जगहों पर पूरा पथ निर्दिष्ट करना बेहतर है, इससे त्रुटियों की संख्या कम हो जाएगी, क्योंकि आप यह नहीं जान सकते कि इस मामले में सिस्टम PATH की जाँच कर रहा है या नहीं केवल वर्तमान निर्देशिका में प्रोग्राम की तलाश करें। अब आप लिनक्स पर प्रोग्राम चलाने के तरीके के बारे में सब कुछ जानते हैं।

निष्कर्ष

इस लेख में हमने देखा कि उबंटू टर्मिनल या अन्य माध्यम से प्रोग्राम कैसे चलाया जाए लिनक्स वितरण. हालाँकि यह बहुत ही सरल विषय लगता है, फिर भी कुछ हैं दिलचस्प बिंदु, जो उपयोगी हो सकता है। लेकिन इनके बारे में आप पहले से ही जानते हैं. यदि आपके कोई प्रश्न हैं, तो टिप्पणियों में पूछें!

किसी भी अन्य मल्टीटास्किंग सिस्टम की तरह, लिनक्स एक साथ कई प्रक्रियाएँ चलाता है। सामान्य तौर पर, मैं आपको गुमराह नहीं करूंगा, क्योंकि एक नियमित सिंगल-प्रोसेसर कंप्यूटर केवल एक ही कार्य कर सकता है इस पलसमय, यही कारण है कि लिनक्स कतार निष्पादन के लिए प्रक्रिया करती है।

प्रक्रियाओं के प्रबंधन के लिए कई बुनियादी आदेश हैं

  • पी.एस.- चल रही प्रक्रियाओं की एक सूची प्रदर्शित करें
  • मारना- एक या अधिक प्रक्रियाओं को संकेत भेजता है (मूल रूप से उन्हें "मारने" के लिए)
  • नौकरियां- आपके द्वारा चल रही प्रक्रियाओं को देखने का एक वैकल्पिक तरीका
  • बीजी- प्रक्रिया निष्पादन को पृष्ठभूमि में रखता है
  • एफजी- प्रक्रिया निष्पादन को पृष्ठभूमि से बाहर लाता है

हालाँकि यह ज्ञान काफी अमूर्त लग सकता है, लेकिन यह अपना रास्ता खोज सकता है प्रायोगिक उपयोगयहां तक ​​कि उस औसत उपयोगकर्ता के लिए भी जो GUI का उपयोग करता है। आप शायद अभी तक यह नहीं जानते होंगे कि बहुमत ग्राफ़िक्स प्रोग्राम(यदि सभी नहीं) कमांड लाइन का उपयोग करके लॉन्च किया जा सकता है। उदाहरण के लिए, आइए ब्राउज़र लॉन्च करने का प्रयास करें, मुझे लगता है कि अधिकांश लिनक्स उपकरणों में या है गूगल क्रोमया फ़ायर्फ़ॉक्स

Enej@linux:/home/pub/www/vv$ google-chrome मौजूदा ब्राउज़र सत्र में नई विंडो बनाई गई।

आप वह यूआरएल निर्दिष्ट कर सकते हैं जिसे आप खोलना चाहते हैं

Enej@linux:/home/pub/www/vv$ google-chrome http://site मौजूदा ब्राउज़र सत्र में नई विंडो बनाई गई।

मेरे पास पहले से ही GUI के माध्यम से Chrome चल रहा है, इसलिए ब्राउज़र रिपोर्ट करता है कि मौजूदा सत्र में एक नई विंडो बनाई जा रही है और कमांड लाइन पर नियंत्रण देता है। या, उदाहरण के लिए, यदि आपको कोई ग्राफ़िक खोलने की आवश्यकता है फ़ाइल मैनेजररूट अधिकारों के साथ (उदाहरण नॉटिलस स्थापित के साथ गनोम ग्राफिकल शेल के लिए काम करेगा)

Enej@linux:/home/pub/www/vv$ sudo nautilus /root/ enej के लिए पासवर्ड:

चूंकि प्रक्रिया पृष्ठभूमि में शुरू नहीं हुई थी, इसलिए अब आप इस टर्मिनल विंडो में कोई भी कार्रवाई नहीं कर सकते हैं (प्रक्रिया को समाप्त करने के लिए आप CTRL + C दबा सकते हैं)।

पृष्ठभूमि मोड

जीवन को आसान बनाने के लिए, ग्राफिकल प्रोग्राम या प्रक्रियाएं जो लंबे समय तक चल सकती हैं, चलाते समय, उनका निष्पादन आमतौर पर पृष्ठभूमि में रखा जाता है, उदाहरण के लिए, आइए ब्राउज़र को पृष्ठभूमि में चलाएं

Enej@linux:/home/pub/www/vv$ google-chrome http://site & 9248

एम्परसेंड चिन्ह ( & ) कमांड कॉल के अंत में इसका मतलब है कि प्रक्रिया निष्पादन को पृष्ठभूमि में रखा जाना चाहिए। इस स्थिति में, इस टर्मिनल विंडो के साथ काम करना संभव रहता है।

लेकिन अचानक आप कॉल के अंत में एम्प्रेसेंट लगाना भूल गए तो एक और तरीका है। आपको पहले CTRL + Z दबाकर निष्पादन को रोकना होगा, फिर हमें कमांड लाइन पर नियंत्रण मिलता है और हम कमांड को कॉल कर सकते हैं बीजी, जिसे हम आखिरी में रखेंगे चलने की प्रक्रियापृष्ठभूमि में. उदाहरण द्वारा बताया गया

Enej@linux:/home/pub/www/vv$ google-chrome http://site ^Z + बंद किया गया google-chrome http://site enej@linux:/home/pub/www/vv$ bg + google- क्रोम http://साइट और

टीम एफजीअंतिम चल रही प्रक्रिया को पृष्ठभूमि से बाहर लाता है।

चल रही प्रक्रियाओं की सूची

चूँकि अब आप जानते हैं कि पृष्ठभूमि में कमांड कैसे चलाना है, इसलिए उनकी एक सूची देखना अच्छा था। ऐसा करने के लिए, कमांड का उपयोग करें नौकरियांया अधिक शक्तिशाली पी.एस.

Enej@linux:/home/pub/www/vv$ नौकरियाँ - nm-एप्लेट चलाना और (wd: ~/bin) + google-chrome चलाना http://site और enej@linux:/home/pub/www/vv $ पीएस पीआईडी ​​टीटीआई टाइम सीएमडी 2304 अंक/0 00:00:02 बैश 11104 अंक/0 00:00:01 क्रोम 11108 अंक/0 00:00:00 क्रोम 11110 अंक/0 00:00:00 क्रोम 11132 अंक/0 00:00:00 क्रोम 12088 पीटीएस/0 00:00:00 पीएस 21165 पीटीएस/0 00:00:27 एनएम-एप्लेट

किसी प्रक्रिया को "मार" कैसे दें?

यदि कोई प्रक्रिया प्रतिक्रिया देना बंद कर देती है (अर्थात् रुक जाती है), तो उसे जबरन "मार" दिया जाना चाहिए। मुझे लगता है कि फ़ायर्फ़ॉक्स का उपयोग करने वालों को इसका सामना करना पड़ा है। ऐसे कार्यों के लिए कमांड का उपयोग किया जाता है मारना. लेकिन पहले आपको किसी तरह प्रक्रिया को परिभाषित करने की आवश्यकता है। ऐसा करने के लिए आप कमांड का उपयोग कर सकते हैं नौकरियांया पी.एस.. पहले का उपयोग करके, आप प्रक्रिया संख्या का पता लगा सकते हैं, और दूसरे का उपयोग करके, इसके पहचानकर्ता का पता लगा सकते हैं।

Enej@linux:/home/pub/www/vv$ google-chrome http://freaksidea..com & 15181 enej@linux:/home/pub/www/vv$ ps PID TTY TIME CMD 2304 अंक/0 00: 00:02 बैश 15181 पीटीएस/0 00:00:00 क्रोम 15238 पीटीएस/0 00:00:00 पीएस 21165 पीटीएस/0 00:00:27 एनएम-एप्लेट enej@linux:/home/pub/www/vv$ किल 15181

टीमें एफजीऔर बीजीपहले तर्क के रूप में वे पृष्ठभूमि से इसके बाद के इनपुट/आउटपुट के लिए चल रही प्रक्रिया की संख्या ले सकते हैं।

हत्या के बारे में और जानें

दरअसल टीम मारनाप्रक्रियाओं को विभिन्न सिग्नल भेजने के लिए उपयोग किया जाता है। बात सिर्फ इतनी है कि ज्यादातर मामलों में यह सिग्नल कमांड को बताता है कि इसे समाप्त हो जाना चाहिए। यदि प्रोग्राम सही ढंग से लिखे गए हैं, तो वे ऑपरेटिंग सिस्टम से विभिन्न संकेतों को सुनते हैं और उन पर प्रतिक्रिया देते हैं। उदाहरण के लिए, एक टेक्स्ट एडिटर को किसी भी सिग्नल को सुनना चाहिए जो सूचित करता है कि उपयोगकर्ताओं को लॉग ऑफ किया जा रहा है या कंप्यूटर बंद हो रहा है। जब उसने (पाठ संपादक ने) ऐसा कोई संकेत "सुना", तो उसे बचाना चाहिए दस्तावेज़ खोलेंअपना काम ख़त्म करने से पहले. टीम मारनाकई प्रकार के सिग्नल भेज सकते हैं, यह पता लगाने के लिए कि कौन से सिग्नल हैं, दर्ज करें मार डालो -एल. नीचे सबसे अधिक उपयोग किए जाने वाले सिग्नलों की सूची दी गई है (कोष्ठक में दी गई संख्या सिग्नल संख्या है)

  • साइनअप(1)- मूल रूप से नियंत्रण टर्मिनल के साथ संचार के नुकसान के बारे में प्रोग्राम को सूचित करने का इरादा था (टर्मिनल अक्सर मॉडेम का उपयोग करके सिस्टम से जुड़े होते थे, इसलिए सिग्नल का नाम हैंग अप - हैंग अप से आता है)। यदि सत्र लीडर प्रक्रिया ने अपना काम पूरा कर लिया है तो SIGHUP सिग्नल भी एप्लिकेशन को भेजा जाता है। कई डेमॉन प्रोग्राम जिनमें सेशन लीडर नहीं होता, वे भी इस सिग्नल को प्रोसेस करते हैं। SIGHUP प्राप्त करने के जवाब में, डेमॉन आम तौर पर पुनः आरंभ होगा (या बस कॉन्फ़िगरेशन फ़ाइल को फिर से पढ़ेगा)। डिफ़ॉल्ट रूप से, यह सिग्नल प्राप्त करने वाला प्रोग्राम समाप्त हो जाता है।
  • हस्ताक्षर(2)- आमतौर पर एक प्रक्रिया को भेजा जाता है यदि टर्मिनल उपयोगकर्ता ने प्रक्रिया को समाप्त करने के लिए एक कमांड दिया है (आमतौर पर यह कमांड कीबोर्ड शॉर्टकट Ctrl + C है)
  • सिगटर्म(15)- कार्यक्रम की "विनम्र" समाप्ति का कारण बनता है। यह संकेत प्राप्त करने के बाद, प्रोग्राम पूरा होने से पहले आवश्यक संचालन कर सकता है (उदाहरण के लिए, खुले दस्तावेज़ों को सहेजना)। SIGTERM प्राप्त करना प्रोग्राम में किसी त्रुटि को इंगित नहीं करता है, बल्कि OS या उपयोगकर्ता की इसे समाप्त करने की इच्छा को दर्शाता है।
  • सिगकिल(9)- कारण बल समाप्तिकार्यक्रम संचालन. प्रोग्राम इस सिग्नल को न तो प्रोसेस कर सकता है और न ही अनदेखा कर सकता है।

डिफ़ॉल्ट आदेश मारनाभेजता है सिगटर्मसिग्नल, लेकिन आप सिग्नल नंबर या उसका नाम भी निर्दिष्ट कर सकते हैं। मान लीजिए कि आपका क्रोम फ़्रीज़ हो गया है (कभी-कभी मेरा फ़्लैश प्लेयर पर्याप्त रूप से काम करना बंद कर देता है)

Enej@linux:/home/pub/www/vv$ google-chrome http://site & 22066 enej@linux:/home/pub/www/vv$ नौकरियाँ - nm-एप्लेट चला रहा है और (wd: ~/bin) + गूगल-क्रोम चलाना http://site और enej@linux:/home/pub/www/vv$ किल -SIGTERM %2 enej@linux:/home/pub/www/vv$ किल -SIGKILL %2 enej@linux :/home/pub/www/vv$ किल -9%2

पी.एस.: मुझे लगता है कि शुरुआती लोगों के लिए 2 कमांड बहुत दिलचस्प होंगे: सूचित करें-भेजें(ग्राफ़िकल शेल के माध्यम से एक संदेश भेजता है, गनोम में ऊपर दाईं ओर दिखाई देता है) और बोलना(भाषण सिंथेसाइज़र)। यदि आपके पास उनमें से कुछ भी नहीं है, तो आप कमांड का उपयोग करके उन्हें इंस्टॉल कर सकते हैं उपयुक्त-प्राप्त करें

Enej@linux:/home/pub/www/vv$ sudo apt-get install espeak notify-send

पिछली बार हमने बैश स्क्रिप्ट, फ़ाइल डिस्क्रिप्टर और स्ट्रीम रीडायरेक्शन में इनपुट, आउटपुट और त्रुटि स्ट्रीम के साथ काम करने के बारे में बात की थी। अब आप अपना खुद का कुछ लिखने के लिए पहले से ही पर्याप्त जानते हैं। बैश में महारत हासिल करने के इस चरण में, आपके मन में यह प्रश्न हो सकता है कि चल रही स्क्रिप्ट को कैसे प्रबंधित किया जाए और उनके लॉन्च को स्वचालित कैसे किया जाए।

अब तक, हमने कमांड लाइन में स्क्रिप्ट के नाम टाइप किए हैं और एंटर दबाया है, जिससे प्रोग्राम तुरंत चलने लगते हैं, लेकिन स्क्रिप्ट को इनवॉइस करने का यह एकमात्र तरीका नहीं है। आज हम इस बारे में बात करेंगे कि एक स्क्रिप्ट लिनक्स सिग्नल के साथ कैसे काम कर सकती है, स्क्रिप्ट चलाने और चलाने के दौरान उन्हें प्रबंधित करने के विभिन्न तरीकों के बारे में।

लिनक्स सिग्नल

लिनक्स में, तीन दर्जन से अधिक सिग्नल हैं जो सिस्टम या एप्लिकेशन द्वारा उत्पन्न होते हैं। यहां सबसे अधिक उपयोग की जाने वाली स्क्रिप्ट की एक सूची दी गई है जो कमांड लाइन स्क्रिप्ट विकसित करते समय निश्चित रूप से काम आएगी।
सिग्नल कोड
नाम
विवरण
1
उच्छ्वास करो
टर्मिनल बंद करना
2
हस्ताक्षर
उपयोगकर्ता द्वारा टर्मिनल से प्रक्रिया को रोकने का संकेत (CTRL + C)
3
सिगक्विट
मेमोरी डंप के साथ टर्मिनल (CTRL + \) से उपयोगकर्ता द्वारा किसी प्रक्रिया को रोकने का सिग्नल
9
सिगकिल
प्रक्रिया की बिना शर्त समाप्ति
15
सिगटर्म
प्रक्रिया समाप्ति अनुरोध संकेत
17
सिगस्टॉप
किसी प्रक्रिया को जबरन निलंबित करना लेकिन समाप्त नहीं करना
18
SIGTSTP
टर्मिनल से किसी प्रक्रिया को रोकना (CTRL+Z) लेकिन बंद नहीं होना
19
सिगकॉन्ट
पहले से रुकी हुई प्रक्रिया का निष्पादन जारी रखें

यदि आप टर्मिनल बंद करते हैं तो बैश शेल को SIGHUP सिग्नल प्राप्त होता है, तो यह बाहर निकल जाता है। बाहर निकलने से पहले, यह चल रही स्क्रिप्ट सहित इसमें चल रही सभी प्रक्रियाओं को एक SIGHUP सिग्नल भेजता है।

SIGINT सिग्नल के कारण ऑपरेशन अस्थायी रूप से रुक जाता है। लिनक्स कर्नेलशेल को प्रोसेसर समय आवंटित करना बंद कर देता है। जब ऐसा होता है, तो शेल प्रक्रियाओं को एक SIGINT सिग्नल भेजकर सूचित करता है।

बैश स्क्रिप्ट इन संकेतों को नियंत्रित नहीं करती हैं, लेकिन वे उन्हें पहचान सकते हैं और संकेतों के कारण होने वाले परिणामों के लिए स्क्रिप्ट तैयार करने के लिए कुछ कमांड निष्पादित कर सकते हैं।

स्क्रिप्ट को सिग्नल भेजना

बैश शेल आपको कीबोर्ड शॉर्टकट का उपयोग करके स्क्रिप्ट को सिग्नल भेजने की अनुमति देता है। यदि आपको किसी चालू स्क्रिप्ट को अस्थायी रूप से रोकने या उसके संचालन को समाप्त करने की आवश्यकता हो तो यह बहुत काम आता है।

किसी प्रक्रिया को समाप्त करना

CTRL + C कुंजी संयोजन एक SIGINT सिग्नल उत्पन्न करता है और इसे शेल में चल रही सभी प्रक्रियाओं को भेजता है, जिससे वे समाप्त हो जाते हैं।

आइए शेल में निम्नलिखित कमांड चलाएँ:

$नींद 100
इसके बाद हम कुंजी संयोजन CTRL+C से इसका कार्य पूरा करेंगे।


कीबोर्ड से एक प्रक्रिया समाप्त करें

प्रक्रिया को अस्थायी रूप से रोकना

CTRL + Z कुंजी संयोजन SIGTSTP सिग्नल उत्पन्न करता है, जो प्रक्रिया को निलंबित करता है लेकिन इसे समाप्त नहीं करता है। यह प्रक्रिया मेमोरी में रहती है और इसका काम दोबारा शुरू किया जा सकता है। आइए शेल में कमांड चलाएँ:

$नींद 100
और कुंजी संयोजन CTRL + Z के साथ इसे अस्थायी रूप से रोकें।


प्रक्रिया को रोकें

संख्या में वर्ग कोष्ठकवह कार्य संख्या है जिसे शेल प्रक्रिया को निर्दिष्ट करता है। शेल अपने भीतर चल रही प्रक्रियाओं को अद्वितीय संख्याओं वाली नौकरियों के रूप में मानता है। पहली प्रक्रिया को नंबर 1 दिया गया है, दूसरे को - 2, इत्यादि।

यदि आप किसी शेल से बंधे कार्य को रोकते हैं और उससे बाहर निकलने का प्रयास करते हैं, तो बैश एक चेतावनी जारी करेगा।

आप निम्न आदेश से निलंबित नौकरियों को देख सकते हैं:

पीएस-एल


कार्य सूची

एस कॉलम में, जो प्रक्रिया की स्थिति प्रदर्शित करता है, निलंबित प्रक्रियाओं के लिए टी प्रदर्शित होता है। यह इंगित करता है कि कमांड या तो निलंबित है या ट्रेस स्थिति में है।

यदि आपको किसी निलंबित प्रक्रिया को समाप्त करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं मारने का आदेश. आप इसके बारे में विवरण पढ़ सकते हैं।

उसकी कॉल इस तरह दिखती है:

प्रोसेसआईडी को मारें

सिग्नल अवरोधन

किसी स्क्रिप्ट में लिनक्स सिग्नल ट्रैकिंग को सक्षम करने के लिए, ट्रैप कमांड का उपयोग करें। यदि स्क्रिप्ट इस कमांड को कॉल करते समय निर्दिष्ट सिग्नल प्राप्त करती है, तो यह इसे स्वतंत्र रूप से संसाधित करती है, जबकि शेल ऐसे सिग्नल को संसाधित नहीं करेगा।

ट्रैप कमांड स्क्रिप्ट को उन संकेतों पर प्रतिक्रिया करने की अनुमति देता है जिन्हें अन्यथा शेल द्वारा उसके हस्तक्षेप के बिना संसाधित किया जाएगा।

आइए एक उदाहरण देखें जो दर्शाता है कि कैसे ट्रैप कमांड निष्पादित किए जाने वाले कोड और रिक्त स्थान द्वारा अलग किए गए संकेतों की एक सूची निर्दिष्ट करता है, जिन्हें हम इंटरसेप्ट करना चाहते हैं। इस मामले में यह सिर्फ एक संकेत है:

#!/बिन/बैश ट्रैप "इको " ट्रैप्ड Ctrl-C"" सिगिनट इको यह एक परीक्षण स्क्रिप्ट है गिनती=1 जबकि [ $गिनती -ले 10 ] इको करते हैं "लूप #$गिनती" स्लीप 1 गिनती=$(($ गिनती +1)) हो गया
इस उदाहरण में उपयोग किया गया ट्रैप कमांड जब भी SIGINT सिग्नल का सामना करता है तो एक टेक्स्ट संदेश प्रिंट करता है, जिसे कीबोर्ड पर Ctrl + C दबाकर उत्पन्न किया जा सकता है।


सिग्नल अवरोधन

हर बार जब आप CTRL + C दबाते हैं, तो स्क्रिप्ट शेल को समाप्त करने देने के बजाय ट्रेस को कॉल करते समय निर्दिष्ट इको कमांड निष्पादित करती है।

ट्रैप कमांड को कॉल करते समय आप EXIT सिग्नल के नाम का उपयोग करके स्क्रिप्ट एग्जिट सिग्नल को इंटरसेप्ट कर सकते हैं:

#!/बिन/बैश ट्रैप "इको गुडबाय..." एग्जिट काउंट=1 जबकि [ $काउंट -ले 5 ] इको "लूप #$काउंट" स्लीप 1 काउंट=$(($काउंट + 1)) हो गया


स्क्रिप्ट निकास सिग्नल को इंटरसेप्ट करना

जब स्क्रिप्ट सामान्य रूप से या SIGINT सिग्नल के कारण बाहर निकलती है, तो शेल इको कमांड को इंटरसेप्ट करेगा और निष्पादित करेगा।

अवरोधित सिग्नलों का संशोधन और अवरोधन को रद्द करना

स्क्रिप्ट द्वारा इंटरसेप्ट किए गए संकेतों को संशोधित करने के लिए, आप नए मापदंडों के साथ ट्रैप कमांड चला सकते हैं:

#!/बिन/बैश ट्रैप "इको "Ctrl-C फंस गया है।" ) ट्रैप हो गया "इको "मैंने ट्रैप को संशोधित किया!"" सिगिनट काउंट=1 जबकि [ $काउंट -ले 5 ] इको करें "सेकंड लूप #$काउंट" स्लीप 1 काउंट=$(($काउंट + 1)) हो गया


सिग्नल अवरोधन संशोधन

संशोधन के बाद सिग्नलों को नए तरीके से प्रोसेस किया जाएगा।

सिग्नल इंटरसेप्शन को केवल ट्रैप कमांड निष्पादित करके, इसे डबल डैश और सिग्नल नाम पास करके भी रद्द किया जा सकता है:

#!/बिन/बैश ट्रैप "इको "Ctrl-C फंस गया है।" ) जाल पूरा हो गया - संकेत प्रतिध्वनि "मैंने अभी-अभी जाल हटाया" गिनती=1 जबकि [ $गिनती -ले 5 ] प्रतिध्वनि करें "दूसरा लूप #$गिनती" नींद 1 गिनती=$(($गिनती + 1)) हो गया
यदि अवरोधन रद्द होने से पहले स्क्रिप्ट को सिग्नल प्राप्त होता है, तो वह इसे निर्दिष्ट अनुसार संसाधित करेगी मौजूदा टीमजाल। आइए स्क्रिप्ट चलाएँ:

$ ./माइस्क्रिप्ट
और कीबोर्ड पर CTRL + C दबाएँ।


इंटरसेप्शन रद्द होने से पहले सिग्नल इंटरसेप्ट किया गया।

CTRL + C का पहला प्रेस स्क्रिप्ट निष्पादन के समय हुआ, जब सिग्नल अवरोधन प्रभाव में था, इसलिए स्क्रिप्ट ने सिग्नल को सौंपे गए इको कमांड को निष्पादित किया। निष्पादन अनहुक कमांड तक पहुंचने के बाद, CTRL + C कमांड ने स्क्रिप्ट को समाप्त करते हुए हमेशा की तरह काम किया।

पृष्ठभूमि में कमांड लाइन स्क्रिप्ट चला रहा है

कभी-कभी बैश स्क्रिप्ट को किसी कार्य को पूरा करने में लंबा समय लगता है। हालाँकि, आपको स्क्रिप्ट पूरी होने की प्रतीक्षा किए बिना कमांड लाइन पर सामान्य रूप से काम करने में सक्षम होने की आवश्यकता हो सकती है। इसे लागू करना उतना कठिन नहीं है.

यदि आपने पीएस कमांड द्वारा आउटपुट प्रक्रियाओं की सूची देखी है, तो आपने उन प्रक्रियाओं को देखा होगा जो पृष्ठभूमि में चल रही हैं और किसी टर्मिनल से बंधी नहीं हैं।
आइए निम्नलिखित स्क्रिप्ट लिखें:

#!/बिन/बैश गिनती=1 जबकि [ $गिनती -ले 10 ] सो जाओ 1 गिनती=$(($गिनती + 1)) हो गया
आइए नाम के बाद एम्परसेंड वर्ण (&) निर्दिष्ट करके इसे चलाएं:

$ ./myscipt &
इससे यह पृष्ठभूमि प्रक्रिया के रूप में चलने लगेगा।


पृष्ठभूमि में एक स्क्रिप्ट चल रही है

स्क्रिप्ट को पृष्ठभूमि प्रक्रिया में लॉन्च किया जाएगा, इसका पहचानकर्ता टर्मिनल में प्रदर्शित किया जाएगा, और जब इसका निष्पादन पूरा हो जाएगा, तो आपको इसके बारे में एक संदेश दिखाई देगा।

ध्यान दें कि यद्यपि स्क्रिप्ट पृष्ठभूमि में चलती है, यह STDOUT और STDERR को संदेश आउटपुट करने के लिए टर्मिनल का उपयोग करना जारी रखती है, जिसका अर्थ है कि यह आउटपुट टेक्स्ट या त्रुटि संदेश टर्मिनल में दिखाई देगा।


प्रक्रियाओं की सूची

इस दृष्टिकोण के साथ, यदि आप टर्मिनल से बाहर निकलते हैं, तो पृष्ठभूमि में चल रही स्क्रिप्ट भी बाहर निकल जाएगी।

यदि आप चाहते हैं कि टर्मिनल बंद करने के बाद भी स्क्रिप्ट चलती रहे तो क्या होगा?

उन स्क्रिप्ट्स को निष्पादित करना जो टर्मिनल बंद करते समय बाहर नहीं निकलती हैं

टर्मिनल सत्र से बाहर निकलने के बाद भी स्क्रिप्ट को पृष्ठभूमि प्रक्रियाओं में निष्पादित किया जा सकता है। ऐसा करने के लिए, आप nohup कमांड का उपयोग कर सकते हैं। यह कमांड आपको प्रक्रिया में भेजे गए SIGHUP सिग्नल को ब्लॉक करके प्रोग्राम चलाने की अनुमति देता है। परिणामस्वरूप, यह प्रक्रिया तब भी निष्पादित की जाएगी जब आप उस टर्मिनल से बाहर निकलेंगे जिसमें इसे लॉन्च किया गया था।

आइए अपनी स्क्रिप्ट चलाते समय इस तकनीक को लागू करें:

नोहुप ./माइस्क्रिप्ट और
यही टर्मिनल पर आउटपुट होगा।


टीम नोहुप

नोहप कमांड टर्मिनल से एक प्रक्रिया को खोल देता है। इसका मतलब यह है कि प्रक्रिया STDOUT और STDERR के संदर्भ खो देगी। स्क्रिप्ट द्वारा डेटा आउटपुट को खोने से बचाने के लिए, nohup स्वचालित रूप से STDOUT और STDERR में आने वाले संदेशों को nohup.out फ़ाइल पर रीडायरेक्ट करता है।

ध्यान दें कि यदि आप एक ही निर्देशिका से एकाधिक स्क्रिप्ट चलाते हैं, तो उनका आउटपुट एक एकल nohup.out फ़ाइल में समाप्त हो जाएगा।

असाइनमेंट देखें

जॉब्स कमांड आपको शेल में चल रहे वर्तमान जॉब्स को देखने की अनुमति देता है। आइए निम्नलिखित स्क्रिप्ट लिखें:

#!/बिन/बैश काउंट=1 जबकि [ $काउंट -ले 10 ] इको "लूप #$काउंट" स्लीप 10 काउंट=$(($काउंट + 1)) हो गया
आइए इसे चलाएँ:

$ ./माइस्क्रिप्ट
और कुंजी संयोजन CTRL + Z के साथ इसे अस्थायी रूप से रोकें।


किसी स्क्रिप्ट को चलाना और रोकना

चलिए उसी स्क्रिप्ट को पृष्ठभूमि में चलाते हैं, जबकि स्क्रिप्ट के आउटपुट को एक फ़ाइल पर रीडायरेक्ट करते हैं ताकि यह स्क्रीन पर कुछ भी प्रदर्शित न करे:

$ ./myscript > आउटफ़ाइल और
अब जॉब्स कमांड निष्पादित करके, हम निलंबित स्क्रिप्ट और पृष्ठभूमि में चल रही स्क्रिप्ट दोनों के बारे में जानकारी देखेंगे।


स्क्रिप्ट के बारे में जानकारी प्राप्त करना

जॉब्स कमांड को कॉल करते समय -l स्विच इंगित करता है कि हमें प्रक्रिया आईडी के बारे में जानकारी चाहिए।

निलंबित कार्यों को पुनः प्रारंभ करना

पृष्ठभूमि में स्क्रिप्ट को पुनः आरंभ करने के लिए, आप bg कमांड का उपयोग कर सकते हैं।

आइए स्क्रिप्ट चलाएँ:

$ ./माइस्क्रिप्ट
CTRL + Z दबाएँ, जिससे इसका निष्पादन अस्थायी रूप से रुक जाएगा। आइए निम्नलिखित कमांड चलाएँ:

$बी.जी


बीजी कमांड

स्क्रिप्ट अब पृष्ठभूमि में चल रही है.

यदि आपके पास कई निलंबित कार्य हैं, तो आप किसी विशिष्ट कार्य को पुनः आरंभ करने के लिए कार्य संख्या को bg कमांड में भेज सकते हैं।

किसी कार्य को पुनः आरंभ करने के लिए सामान्य मोडएफजी कमांड का उपयोग करें:

स्क्रिप्ट चलाने की योजना बना रहे हैं

लिनक्स बैश स्क्रिप्ट चलाने के लिए कुछ तरीके प्रदान करता है विस्तृत समय. ये एट कमांड और क्रॉन जॉब शेड्यूलर हैं।

एट कमांड इस तरह दिखता है:

[-f फ़ाइल नाम] समय पर
यह कमांड कई टाइम फॉर्मेट को पहचानता है।

  • मानक, घंटे और मिनट का संकेत, उदाहरण के लिए - 10:15।
  • दोपहर से पहले या बाद में AM/PM संकेतकों का उपयोग करना, उदाहरण के लिए - रात 10:15 बजे।
  • विशेष नामों का उपयोग करना जैसे अभी, दोपहर, आधी रात।
उस समय को निर्दिष्ट करने में सक्षम होने के अलावा जिस पर कोई कार्य चलना चाहिए, एट कमांड को इसके समर्थित प्रारूपों में से किसी एक का उपयोग करके एक तारीख भी पारित की जा सकती है।
  • एक मानक दिनांक प्रारूप जिसमें दिनांक MMDDYY, MM/DD/YY, या DD.MM.YY पैटर्न का उपयोग करके लिखा जाता है।
  • तारीख का एक पाठ प्रतिनिधित्व, उदाहरण के लिए, 4 जुलाई या 25 दिसंबर, जबकि वर्ष निर्दिष्ट किया जा सकता है या आप इसके बिना भी काम कर सकते हैं।
  • अब की तरह रिकॉर्डिंग + 25 मिनट।
  • रिकॉर्डिंग दृश्य कल रात्रि 10:15 बजे।
  • रिकॉर्डिंग प्रकार 10:15 + 7 दिन।
आइए इस विषय में अधिक गहराई में न जाएं, आइए कमांड के लिए एक सरल उपयोग के मामले को देखें:

$ अभी -f ./myscript पर


एट कमांड का उपयोग करके कार्य शेड्यूल करना

कॉल करते समय -M स्विच का उपयोग स्क्रिप्ट आउटपुट को भेजने के लिए किया जाता है ईमेल, यदि सिस्टम तदनुसार कॉन्फ़िगर किया गया है। अगर भेज रहा हूँ ईमेलयह संभव नहीं है, यह स्विच बस आउटपुट को दबा देगा।

निष्पादित होने की प्रतीक्षा कर रहे कार्यों की सूची देखने के लिए, आप atq कमांड का उपयोग कर सकते हैं:


लंबित कार्यों की सूची

लंबित कार्य हटाना

एटीएम कमांड आपको लंबित कार्य को हटाने की अनुमति देता है। इसे कॉल करते समय, कार्य संख्या इंगित करें:

$atrm 18


किसी कार्य को हटाना

स्क्रिप्ट को एक शेड्यूल पर चलाना

एट कमांड का उपयोग करके अपनी स्क्रिप्ट को एक बार चलाने के लिए शेड्यूल करने से कई स्थितियों में जीवन आसान हो सकता है। लेकिन क्या होगा यदि आपको स्क्रिप्ट को हर दिन एक ही समय पर, या सप्ताह में एक बार, या महीने में एक बार निष्पादित करने की आवश्यकता हो?

Linux में एक crontab उपयोगिता है जो आपको उन स्क्रिप्ट को शेड्यूल करने की अनुमति देती है जिन्हें नियमित रूप से चलाने की आवश्यकता होती है।

क्रोनटैब पृष्ठभूमि में चलता है और, तथाकथित क्रोन तालिकाओं में डेटा के आधार पर, निर्धारित कार्य चलाता है।

मौजूदा क्रॉन जॉब तालिका देखने के लिए, निम्न आदेश का उपयोग करें:

$ क्रोंटैब -एल
किसी स्क्रिप्ट को शेड्यूल पर चलाने के लिए शेड्यूल करते समय, crontab निम्नलिखित प्रारूप में कार्य को निष्पादित करने की आवश्यकता के बारे में डेटा स्वीकार करता है:

मिनट, घंटा, महीने का दिन, महीना, सप्ताह का दिन।
उदाहरण के लिए, यदि आप चाहते हैं कि एक निश्चित स्क्रिप्ट नाम का कमांड हर दिन 10:30 बजे निष्पादित किया जाए, तो यह कार्य तालिका में निम्नलिखित प्रविष्टि के अनुरूप होगा:

30 10* * *आदेश
यहां, महीने, महीने और सप्ताह के दिन के फ़ील्ड के लिए उपयोग किया जाने वाला वाइल्डकार्ड "*" इंगित करता है कि क्रॉन को हर महीने के हर दिन सुबह 10:30 बजे कमांड चलाना चाहिए।

यदि, उदाहरण के लिए, आप चाहते हैं कि स्क्रिप्ट प्रत्येक सोमवार को शाम 4:30 बजे चले, तो आपको कार्य तालिका में निम्नलिखित प्रविष्टि बनानी होगी:

30 16* *1 कमांड
सप्ताह के दिनों की संख्या 0 से शुरू होती है, 0 का मतलब रविवार है, 6 का मतलब शनिवार है। यहाँ एक और उदाहरण है. यहां प्रत्येक माह की पहली तारीख को दोपहर 12 बजे कमांड निष्पादित की जाएगी।

00 12 1* *कमांड
महीनों को 1 से शुरू करके क्रमांकित किया जाता है।
किसी तालिका में प्रविष्टि जोड़ने के लिए, आपको -e स्विच के साथ crontab को कॉल करना होगा:

क्रोंटैब-ई
फिर आप शेड्यूल जनरेशन कमांड दर्ज कर सकते हैं:

30 10* * * /होम/लाइकगीक्स/डेस्कटॉप/माइस्क्रिप्ट
इस कमांड की बदौलत स्क्रिप्ट को हर दिन 10:30 बजे कॉल किया जाएगा। यदि आपको "संसाधन अस्थायी रूप से अनुपलब्ध" त्रुटि का सामना करना पड़ता है, तो नीचे दिए गए कमांड को रूट के रूप में चलाएँ:

$ rm -f /var/run/crond.pid
आप कई विशेष निर्देशिकाओं का उपयोग करके क्रॉन का उपयोग करके स्क्रिप्ट के आवधिक लॉन्च को और भी आसान तरीके से व्यवस्थित कर सकते हैं:

/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
उनमें से किसी एक में स्क्रिप्ट फ़ाइल रखने से यह क्रमशः प्रति घंटा, दैनिक, साप्ताहिक या मासिक चलेगी।

लॉगिन और शेल स्टार्टअप पर स्क्रिप्ट चलाएँ

आप उपयोगकर्ता लॉगिन या शेल लॉन्च जैसी विभिन्न घटनाओं के आधार पर स्क्रिप्ट के लॉन्च को स्वचालित कर सकते हैं। आप उन फ़ाइलों के बारे में पढ़ सकते हैं जो ऐसी स्थितियों में संसाधित होती हैं। उदाहरण के लिए, ये निम्नलिखित फ़ाइलें हैं:

$HOME/.bash_profile $HOME/.bash_login $HOME/.profile
लॉगिन पर स्क्रिप्ट चलाने के लिए, इसकी कॉल को .bash_profile फ़ाइल में रखें।

जब आप टर्मिनल खोलते हैं तो स्क्रिप्ट चलाने के बारे में क्या ख्याल है? .bashrc फ़ाइल आपको इसे व्यवस्थित करने में मदद करेगी।

परिणाम

आज हमने प्रबंधन से जुड़े मुद्दों पर चर्चा की जीवन चक्रस्क्रिप्ट्स, हमने इस बारे में बात की कि स्क्रिप्ट्स को पृष्ठभूमि में कैसे चलाया जाए, उनके निष्पादन को कैसे शेड्यूल किया जाए। अगली बार, बैश स्क्रिप्ट और लाइब्रेरी डेवलपमेंट में फ़ंक्शन के बारे में पढ़ें।

प्रिय पाठकों! क्या आप कमांड लाइन स्क्रिप्ट को शेड्यूल पर चलाने के लिए टूल का उपयोग करते हैं? यदि हां, तो कृपया हमें उनके बारे में बताएं।



मित्रों को बताओ