बैश जैसी प्रक्रियाओं को कैसे स्थगित करें और फिर से शुरू करें


13

यह प्रश्न अनुवर्ती है: प्रक्रियाओं को कैसे स्थगित करें और फिर से शुरू करें

मैंने गनोम-टर्मिनल में बैश सत्र से फ़ायरफ़ॉक्स शुरू किया है।

प्रक्रिया पेड़ इस तरह दिखता है:

$ ps -e -o pid,ppid,cmd -H
 1828     1   gnome-terminal
26677  1828     bash
27980 26677       /bin/sh /usr/lib/firefox-3.6.15/firefox
27985 27980         /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin
27989 27985           /usr/lib/firefox-3.6.15/firefox-bin
28012 27989             /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true

जब मैं CTRL+Zबैश में मारूंगा, तो यह फ़ायरफ़ॉक्स को निलंबित कर देगा। जब मैं कमांड जारी करता हूं bg(या fg) यह फ़ायरफ़ॉक्स फिर से शुरू करेगा। यह उम्मीद के मुताबिक है।

जब मैं kill -s SIGTSTP 27980दूसरे टर्मिनल में कमांड जारी करता हूं , तो यह [1]+ Stopped firefoxपहले टर्मिनल में लाइन प्रिंट करेगा (जैसे कि जब मैं हिट CTRL+Zकरता हूं ), लेकिन यह फ़ायरफ़ॉक्स को निलंबित नहीं करता है। मुझे लगता है कि यह केवल शेल स्क्रिप्ट को निलंबित करता है।

जब मैं kill -s SIGTSTP 27989दूसरे टर्मिनल में कमांड (पीआईडी ​​पर ध्यान दें) जारी करता हूं , तो यह फ़ायरफ़ॉक्स को निलंबित कर देगा। पहला टर्मिनल इस पर ध्यान नहीं देता है।

बैश पूरी प्रक्रिया पेड़ को कैसे निलंबित करता है? क्या यह सिर्फ पेड़ और SIGTSTP के सभी बच्चों को पीछे छोड़ देता है?



प्रक्रिया समूह @geekosaur के बारे में बात कर रहा है यह देखने के pgidलिए आपको अपने psकमांड में जोड़ना चाहिए ।
नवजाल

जवाबों:


17

शेल नौकरियां "प्रक्रिया समूहों" में रहती हैं; देखो PGRPविस्तारित में स्तंभ psउत्पादन। ये दोनों नौकरी नियंत्रण के लिए और यह निर्धारित करने के लिए उपयोग किए जाते हैं कि कौन टर्मिनल (वास्तविक या Pty) का मालिक है।

POSIX (सिस्टम V से लिया गया) एक प्रक्रिया समूह को इंगित करने के लिए एक नकारात्मक प्रक्रिया आईडी का उपयोग करता है, क्योंकि प्रक्रिया समूह को समूह में पहली प्रक्रिया ("प्रक्रिया समूह नेता") द्वारा पहचाना जाता है। तो आप psप्रक्रिया समूह को निर्धारित करने के लिए उपयोग करेंगे , फिर kill -s TSTP "-$pgrp"। (कोशिश करें ps -u"$USER" -opid,ppid,pgrp,cmd।)

आपके प्रोसेस ट्री में, प्रोसेस ग्रुप firefoxद्वारा शुरू की गई स्क्रिप्ट से शुरू होता है bash, इसलिए प्रोसेस ग्रुप 27980 होगा और कमांड होगा kill -s TSTP -27980

स्वाभाविक रूप से, प्रक्रिया समूह को जारी करने के लिए, जारी करें kill -s CONT -- -27980


7
वैसे, जब आप टाइप करते हैं तो bashऐसा नहीं SIGTSTPकरते हैं ^Z; चूँकि firefox's प्रोसेस ग्रुप' टर्मिनल का करंट प्रोसेस ग्रुप है, इसलिए टर्मिनल ड्राइवर (पेडेंटली, लाइन डिसिप्लिन) SIGTSTPउस प्रोसेस ग्रुप की सभी प्रक्रियाओं को भेजता है । bashबस waitpid()उस पर (और किसी भी अन्य नौकरियों) आईएनजी है। अन्य टर्मिनल सिग्नल, जैसे कि ^Cऔर ^\ उसी तरह से काम करते हैं। (मेटा: एसई से नफरत है कि ctrl-backslash ..)
geekosaur
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.