Gentoo के संस्थापक से लिनक्स की मूल बातें। भाग 2 (3/5): प्रक्रिया प्रबंधन

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







Gentoo के संस्थापक से लिनक्स मूल बातें नेविगेशन:


भाग I
  1. BASH: नेविगेशन मूल बातें (परिचय)
  2. फ़ाइलों और निर्देशिकाओं का प्रबंधन करें
  3. लिंक और फ़ाइलों और निर्देशिकाओं को हटाना
  4. ग्लोब लुकअप (योग और लिंक)


भाग II
  1. नियमित भाव (परिचय)
  2. फ़ोल्डर असाइनमेंट, फ़ाइल खोज
  3. प्रक्रिया प्रबंधन
  4. पाठ प्रसंस्करण और पुनर्निर्देशन
  5. कर्नेल मॉड्यूल (योग और लिंक)






प्रक्रिया प्रबंधन



Xeyes लॉन्च करें



प्रक्रिया नियंत्रण सीखने के लिए, पहले एक प्रक्रिया शुरू की जानी चाहिए। सुनिश्चित करें कि आपके पास X चल रहा है (ग्राफिक सर्वर - लगभग।) और निम्नलिखित कमांड चलाएँ:









$ xeyes -center red







आप माउस कर्सर के बाद xeyes पॉपअप और लाल आँखें देखेंगे। इसके अलावा, ध्यान दें कि आपको टर्मिनल में कमांड दर्ज करने का निमंत्रण नहीं मिला है।









प्रक्रिया बंद करो



प्रॉम्प्ट वापस करने के लिए, आपको कंट्रोल-सी (जिसे अक्सर Ctrl-C या ^ C के रूप में लिखा जाता है) दबाएं:









आपको अपना निमंत्रण वापस मिल गया, लेकिन xeyes विंडो गायब हो गई। वास्तव में, प्रक्रिया "मार दी गई।" नियंत्रण-सी को पूरा करने के बजाय, हम नियंत्रण-जेड का उपयोग करके प्रक्रिया को रोक सकते हैं:









$ xeyes -center red

Control-Z






  [१] + रूका हुआ xes -सेंटर लाल 
$







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









एफजी और बीजी



"हलचल" प्रक्रिया को शुरू करने और इसे वापस करने के लिए, हम इसे fg कमांड (अंग्रेजी अग्रभूमि से - लगभग प्रति) का उपयोग करके सबसे आगे ला सकते हैं।









$ fg

(test it out, then stop the process again)

Control-Z






  [१] + रूका हुआ xes -सेंटर लाल 
$







और अब हम इसे bg कमांड (अंग्रेजी बैकग्राउड - लगभग प्रति) से) बैकग्राउंड में जारी रखेंगे।









$ bg

[1]+ xeyes -center red &

$








वाह! Xeyes प्रक्रिया अब पृष्ठभूमि में चल रही है, और फिर से हमारे पास बैश प्रॉम्प्ट है।









का उपयोग करना



अगर हमें xeyes को बैकग्राउंड में तुरंत चलाने की आवश्यकता है (कंट्रोल-जेड और bg का उपयोग करने के बजाय), हम बस xeyes कमांड के अंत में "&" (एम्परसेंड) जोड़ सकते हैं:









$ xeyes -center blue &

[2] 16224








एकाधिक पृष्ठभूमि प्रक्रियाएं



अब, पृष्ठभूमि में, लाल और नीले xeyes एक ही समय में काम कर रहे हैं। हम नौकरियों के साथ नौकरियों की सूची देख सकते हैं:









 $ jobs -l 
      

[1]- 16217 Running xeyes -center red & [2]+ 16224 Running xeyes -center blue &






बाएं कॉलम में नंबर वह जॉब सीक्वेंस नंबर है, जो इसे स्टार्टअप पर असाइन करता है। दूसरे कार्य में प्लस (+) का मतलब है कि यह "वर्तमान कार्य" है, जब आप एफजी दर्ज करते हैं तो इसे सबसे आगे लाया जाएगा। आप इसकी संख्या को इंगित करके किसी विशिष्ट कार्य में सबसे आगे ला सकते हैं; उदाहरण के लिए, fg 1 लाल xeyes बना देगा। अगला कॉलम प्रक्रिया पहचानकर्ता या संक्षिप्त पीआईडी ​​है, कृपया -l विकल्प के लिए आउटपुट के लिए जोड़ा गया। अंत में, दाईं ओर "रनिंग" प्रक्रिया (रनिंग) और उनकी कमांड लाइन दोनों की स्थिति।









सिग्नल का परिचय



प्रक्रिया को मारने, रोकने या जारी रखने के लिए, लिनक्स सिग्नल के एक विशेष रूप का उपयोग करता है जिसे सिग्नल कहा जाता है। किसी प्रक्रिया को संकेत भेजकर, आप इसे समाप्त कर सकते हैं, इसे रोक सकते हैं, या कुछ और कर सकते हैं। यह वास्तव में तब होता है जब आप नियंत्रण-सी, नियंत्रण-जेड दबाते हैं, या बीजी और एफजी का उपयोग करते हैं - आप प्रक्रिया को एक विशिष्ट संकेत भेजने के लिए बैश बताते हैं। प्रक्रिया आईडी (pid) पैरामीटर को इंगित करके सिग्नल को किल कमांड का उपयोग करके भी भेजा जा सकता है:









 $  kill -s SIGSTOP 16224 
      

$ jobs -l

[1]- 16217 Running xeyes -center red & [2]+ 16224 Stopped (signal) xeyes -center blue






जैसा कि आप देख सकते हैं, मार जरूरी नहीं कि "मार" प्रक्रिया है, हालांकि यह हो सकता है। -S विकल्प का उपयोग करके, किल प्रक्रिया को कोई भी संकेत भेज सकता है। जब वे एक SIGINT, SIGSTOP, या SIGCONT सिग्नल प्राप्त करते हैं, तो लिनक्स मारता है, रोकता है या जारी रखता है। अन्य संकेत हैं जो आप प्रक्रियाओं को भेज सकते हैं; कुछ संकेतों को स्वयं कार्यक्रमों के अंदर संसाधित किया जा सकता है। आप उन संकेतों के बारे में पता लगा सकते हैं जो एक विशेष कार्यक्रम अपने अयाल में अपने SIGNALS अनुभाग को देखकर प्रक्रिया करता है।









SIGTERM और SIGINT



यदि आप प्रक्रिया को मारना चाहते हैं, तो कई विकल्प हैं। डिफ़ॉल्ट रूप से, किल एक SIGTERM भेजता है, जो Control-C द्वारा भेजे गए SIGINT से अलग होता है, लेकिन आमतौर पर इसका उपयोग एक ही होता है:









 $ kill 16217 
      

$ jobs -l

[1]- 16217 Terminated xeyes -center red [2]+ 16224 Stopped (signal) xeyes -center blue






पूरी मार



प्रक्रिया दोनों संकेतों, SIGTERM और SIGINT को या तो अपने विवेक से अनदेखा कर सकती है, क्योंकि या तो इसे रोका जाता है, या यह किसी तरह "अटक" जाता है। इस मामले में, एक बड़े हथौड़ा का उपयोग करना आवश्यक हो सकता है - एक संकेत संकेत। प्रक्रिया SIGKILL को अनदेखा नहीं कर सकती:









$ kill 16224

$ jobs -l






  [२] + १६ ९ २४ स्टॉप (सिग्नल) xes -सेंटर ब्लू 
 $  kill -s SIGKILL 16224 
      

$ jobs -l

[2]+ 16224 Interrupt xeyes -center blue






nohup



जिस टर्मिनल पर आप कार्य चलाते हैं, उसे कार्य प्रबंधन टर्मिनल कहा जाता है। जब आप बाहर निकलते हैं तो कुछ गोले (डिफ़ॉल्ट रूप से बैश नहीं) बैकग्राउंड जॉब के लिए एक सिग्नल भेजते हैं, जिससे वे समाप्त हो जाते हैं। प्रक्रियाओं को इस व्यवहार से बचाने के लिए, प्रक्रिया शुरू करते समय नोह का उपयोग करें:









$ nohup make &

[1] 15632

$ exit








प्रक्रियाओं को सूचीबद्ध करने के लिए ps का उपयोग करें



हमारे द्वारा पहले उपयोग की गई कार्य कमांड केवल उन प्रक्रियाओं को प्रदर्शित करती है जो आपके बैश सत्र में चल रही थीं। अपने सिस्टम पर सभी प्रक्रियाओं को देखने के लिए, a और x विकल्पों के साथ ps का उपयोग करें:









 $  ps ax 
      

PID TTY STAT TIME COMMAND 1 ? S 0:04 init [3] 2 ? SW 0:11 [keventd] 3 ? SWN 0:13 [ksoftirqd_CPU0] 4 ? SW 2:33 [kswapd] 5 ? SW 0:00 [bdflush]






केवल पहले 5 प्रक्रियाएं यहां सूचीबद्ध हैं, क्योंकि प्रक्रियाओं की सूची आमतौर पर बहुत लंबी है। कमांड आपको हर उस चीज़ का "कास्ट" देता है जो वर्तमान में मशीन पर चल रहा है, लेकिन इसमें बहुत सारी अतिरिक्त जानकारी है। यदि आपने कुल्हाड़ी निर्दिष्ट नहीं की है, तो आपको केवल उन प्रक्रियाओं की एक सूची प्राप्त होगी जो आपके हैं और जो नियंत्रण टर्मिनल में हैं। पीएस एक्स कमांड आपकी सभी प्रक्रियाओं को दिखाएगा, यहां तक ​​कि जो नियंत्रण टर्मिनल में नहीं हैं। यदि आप ps a का उपयोग करते हैं, तो आपको सभी उपयोगकर्ताओं के टर्मिनलों से प्रक्रियाओं की एक सूची मिलेगी।









"वन" और "पेड़" देखें



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









 $  ps x --forest 
      

PID TTY STAT TIME COMMAND 927 pts/1 S 0:00 bash 6690 pts/1 S 0:00 \_ bash 26909 pts/1 R 0:00 \_ ps x --forest 19930 pts/4 S 0:01 bash 25740 pts/4 S 0:04 \_ vi processes.txt






"यू" और "एल" पीएस विकल्प



विकल्प यू और एल विकल्पों के साथ किसी भी संयोजन में उपयोग किया जा सकता है , एक्स प्रक्रियाओं के बारे में अधिक विस्तृत जानकारी प्राप्त करने के लिए:









$ ps au





  USER PID% CPU% MEM VS VS RSS TTY STAT START TIME COMMAND
 एग्रीफिस 403 0.0 0.0 2484 72 tty1 S 2001 0:00 -बैश
 चॉसर 404 0.0 0.0 2508 92 tty2 S 2001 0:00 -बाश
 रूट 408 0.0 0.0 1308 248 tty6 S 2001 0:00 / sbin / agetty 3
 एग्रीफिस 434 0.0 0.0 1008 4 tty1 S 2001 0:00 / बिन / श / usr / एक्स
 चॉसर 927 0.0 0.0 2540 96 pts / 1 S 2001 0:00 बैश 
$ ps al





  F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
 100 1001 403 1 9 0 2484 72 प्रतीक्षा 4 एस tty1 0:00 -बैश
 100 1000 404 1 9 0 2508 92 प्रतीक्षा 4 एस tty2 0:00 -बैश
 000 0 408 1 9 0 1308 248 read_c S tty6 0:00 / sbin / ag
 000 1001 434 403 9 0 1008 4 Wait4 S tty1 0:00 / bin / sh
 000 1000 927 652 9 0 2540 96 प्रतीक्षा 4 एस पीटीएस / 1 0:00 बैश 


शीर्ष का उपयोग करना



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









 $  top 
      

10:02pm up 19 days, 6:24, 8 users, load average: 0.04, 0.05, 0.00 75 processes: 74 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 1.3% user, 2.5% system, 0.0% nice, 96.0% idle Mem: 256020K av, 226580K used, 29440K free, 0K shrd, 3804K buff Swap: 136544K av, 80256K used, 56288K free 101760K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 628 root 16 0 213M 31M 2304 S 0 1.9 12.5 91:43 X 26934 chouser 17 0 1272 1272 1076 R 0 1.1 0.4 0:00 top 652 chouser 11 0 12016 8840 1604 S 0 0.5 3.4 3:52 gnome-termin 641 chouser 9 0 2936 2808 1416 S 0 0.1 1.0 2:13 sawfish






अच्छा



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









$ nice -n 10 oggenc /tmp/song.wav







चूंकि प्राथमिकता अच्छी के रूप में जानी जाती है, इसलिए इसे याद रखना आसान हो गया है; उदाहरण के लिए, अच्छा का अधिक मूल्य अन्य प्रक्रियाओं को "अच्छा" (अच्छा) बनाता है, जिससे उन्हें सीपीयू समय पर अधिक प्राथमिकता प्राप्त करने की अनुमति मिलती है। डिफ़ॉल्ट रूप से, प्रक्रियाएं प्राथमिकता 0 से शुरू होती हैं, इसलिए ऑगेंक के लिए प्राथमिकता को 10 पर सेट करने का मतलब है कि यह अन्य प्रक्रियाओं के लिए काम करने के लिए अधिक समय देगा। आमतौर पर, इसका मतलब यह है कि ओगेंसेन अन्य प्रक्रियाओं को अपनी सामान्य गति से चलाने में सक्षम होगा, चाहे कोई भी प्रोसेसर ओगेंक कितनी देर तक चाहे। आप इन "शिष्टाचार स्तर" को पहले ps के NI कॉलम और शीर्ष में देख सकते हैं।









renice



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









 $  ps l 641 
      

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 0 5876 2808 do_sel S ? 2:14 sawfish

$ renice 10 641

641: old priority 0, new priority 10



$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 10 5876 2808 do_sel S ? 2:14 sawfish




$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 0 5876 2808 do_sel S ? 2:14 sawfish

$ renice 10 641

641: old priority 0, new priority 10



$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 10 5876 2808 do_sel S ? 2:14 sawfish




 $  ps l 641 
      

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 0 5876 2808 do_sel S ? 2:14 sawfish

$ renice 10 641

641: old priority 0, new priority 10



$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 10 5876 2808 do_sel S ? 2:14 sawfish








अनुवाद के लिए दिमित्री मिंस्की ( दिमित्री.मिन्स्की @gmail.com) को धन्यवाद।









जारी रखने के लिए ...






लेखकों के बारे में



डैनियल रॉबिंस



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









क्रिस हाउसर



क्रिस होसर 1994 से UNIX के समर्थक हैं, जब वे टेलर विश्वविद्यालय (इंडियाना, संयुक्त राज्य अमेरिका) में प्रशासकों की टीम में शामिल हुए, जहाँ उन्होंने कंप्यूटर विज्ञान और गणित में स्नातक की डिग्री प्राप्त की। फिर उन्होंने विभिन्न क्षेत्रों में काम किया, जिसमें वेब एप्लिकेशन, वीडियो एडिटिंग, UNIX ड्राइवर और क्रिप्टोग्राफ़िक सुरक्षा शामिल हैं। वर्तमान में संतरी डेटा सिस्टम पर काम करता है। क्रिस ने कई मुफ्त परियोजनाओं में भी योगदान दिया, जैसे कि गेंटू लिनक्स और क्लोजर, और द जॉय ऑफ क्लोजर के सह-लेखक।









एरन ग्रिफिस



आयरन ग्रिफ़िस बोस्टन में रहते हैं, जहाँ उन्होंने पिछले दशक में Hewlett-Packard पर काम कर रहे प्रोजेक्ट्स जैसे कि UNIX नेटवर्क ड्राइवरों के लिए Tru64, Linux, Xen और KVM वर्चुअलाइजेशन सुरक्षा प्रमाणीकरण और हाल ही में HP ePrint प्लेटफ़ॉर्म पर काम किया। प्रोग्रामिंग से अपने खाली समय में, एरॉन अपनी साइकिल की सवारी करते समय प्रोग्रामिंग समस्याओं को मिटा देना पसंद करते हैं, बिट्स के साथ करतब दिखाते हैं, या बोस्टन पेशेवर बेसबॉल टीम रेड सॉक्स के लिए जयकार करते हैं।








All Articles