प्रेस करने की असुविधा के लिए एक निवारक उपाय के रूप में CTRL- zआप अपने संपादक के लिए एक आवरण स्क्रिप्ट बना सकते हैं, जो आपके संपादक को पृष्ठभूमि में चलाएगी। इस तरह से आपको पृष्ठभूमि में इसे स्पष्ट रूप से शुरू करने के लिए याद रखने की आवश्यकता नहीं होगी:
#!/bin/sh
EDITOR="emacs" # or whatever
if [ -z "${DISPLAY}" ]; then
${EDITOR} "$@"
else
${EDITOR} "$@" &
fi
ऊपर हम पहले यह निर्धारित करने का प्रयास करते हैं कि क्या आपके पास एक्स सर्वर उपलब्ध है और उसके बाद ही पृष्ठभूमि में संपादक चलाएं (यदि नहीं, तो कई यूनिक्स संपादक आपके टर्मिनल का उपयोग करेंगे और आप इस मामले में पृष्ठभूमि प्रक्रिया के रूप में संपादक को चलाना नहीं चाहते हैं) । यह आपकी पसंद के संपादक के लिए सभी दलीलें पास कर देगा "$@", जैसे कि आपने रैपर स्क्रिप्ट के लिए प्रदान किया था।
कमांड के रूप में आप गायब हैं ... मेरे मूल प्रयोग के अनुसार, GUI कार्यक्रमों के लिए जो टर्मिनल को शामिल नहीं करते हैं, यह पहले भेजने SIGSTOPऔर फिर SIGCONTअग्रभूमि प्रक्रिया के रूप में सरल हो सकता है ( killकमांड का उपयोग करके यदि आप इसे लागू करने के लिए शेल स्क्रिप्ट का उपयोग करते हैं) । आपको निश्चित रूप से इसे किसी अन्य टर्मिनल विंडो / टैब में चलाने की आवश्यकता होगी, और कठिनाई आसानी से और जेनेरिक फैशन में उस पीआईडी को खोजने के लिए होगी जिसे आप अपना सिग्नल भेजना चाहते हैं। आप डिफ़ॉल्ट रूप से दिए गए नाम की सभी प्रक्रियाओं को दो संकेत भेज सकते हैं (अपने पसंदीदा संपादक को डिफ़ॉल्ट करना और पीआईडी का उपयोग तर्क के रूप में भी करना चाहते हैं):
#!/bin/sh
EDITOR=emacs # whatever
stop_cont_prog()
{
case "$1" in
# begin with number is considered PID - this is not good
# enough to be taken seriously...
[1-9]*) kill -SIGSTOP "$1"; kill -SIGCONT "$2";;
*) killall -SIGSTOP "$1"; killall -SIGCONT "$2";;
esac
}
if [ -n "$1" ]; then
for prog in "$@"; do stop_cont_prog "$1"; done
else
stop_cont_prog "${EDITOR}"
fi
इस पद्धति ने emacsपृष्ठभूमि में चलने (कई) कमांड के बाद मुझे अपने टर्मिनल टैब को सही ढंग से दिया । लेकिन शेल में चल रही emacs प्रक्रिया को शेल जॉब नियंत्रण या टर्मिनल सेटिंग भ्रम के कारण ठीक से बहाल नहीं किया गया था। तो इस विधि को कुछ परिष्कार से लाभ होगा।
SIGSTOPवास्तव में क्या अग्रभूमि प्रक्रिया जब आप (आम चूक से) प्रेस करने भेज रहा है CTRL- z। stty -aआउटपुट का संदर्भ लें
$ stty -a
speed 38400 baud; rows 50; columns 200; line = 0;
intr = ^C; [...] start = ^Q; stop = ^S; susp = ^Z; [...]
[...]
(आउटपुट संक्षिप्त) और sttyमैनुअल पेज:
susp CHAR
CHAR will send a terminal stop signal
SIGSTOPसिग्नल का उपयोग कर बंद की गई प्रक्रियाओं को भेजकर पुनः आरंभ किया जा सकता है SIGCONT। आम तौर पर यह शेल जॉब कंट्रोल लॉजिक होता है जो हमें भेजने और आदेशों से SIGCONTजुड़े अन्य आवश्यक जोड़तोड़ का ध्यान रखेगा fgऔर bgजिन्हें हम नजरअंदाज करते हैं।
tmuxआपके प्रश्न में वांछित रूप से समान कार्यक्षमता देता है।