2009-04-28 15 views
10

प्रश्न विशेष है क्योंकि कुछ कुंजी, जैसे कि CTRL + Z, ने काम करना बंद कर दिया।टूटा CTRL + Z के साथ निष्पादन के बाद मैं पृष्ठभूमि को कैसे प्रक्रिया कर सकता हूं?

मैं आदेश में टाइप करके पृष्ठभूमि करने के लिए प्रक्रिया डालने की कोशिश की:

  1. लगता है/
  2. Ctrl + Z
  3. bg

हालांकि, मैं अभी भी stdout देख सकते हैं। केवल पहला कदम करने का एकमात्र अंतर यह है कि CTRL + Z कमांड अब काम नहीं करता है। जब मेरे पास सहेजी गई नौकरियां नहीं हैं और मेरा हार्डड्राइव 100 जीबी से अधिक है तो यह बदसूरत है। तो

मैं प्रक्रिया को पृष्ठभूमि में कैसे रख सकता हूं?

[विवरण]

मैं मैक पर बैश के चौथे संस्करण का उपयोग कर रहा हूँ।

[निकोलस रिले द्वारा क्रक्स उत्तर]

समस्या वास्तव में है कि मैं इस प्रक्रिया पृष्ठभूमि चलाने का "असर" समझ में नहीं आता। मैं समझ नहीं पा रहा हूं कि क्यों CTRL + Z जैसे कमांड पृष्ठभूमि प्रक्रियाओं पर काम नहीं करते हैं। मैं अभी भी कमांड के साथ एक और खोल में प्रक्रिया को मारने के लिए कर रहा था:

ps -ej | awk '! /grep/ && /find/ {print $2}' | xargs kill -9 

उत्तर

12

^Z काम नहीं कर रहा है क्योंकि सबसे बड़ी नौकरी अब खोल है, और गोले आमतौर पर SIGTSTP का जवाब नहीं देते हैं। (यदि आप वास्तव में एक गैर-लॉगिन खोल को निलंबित करना चाहते हैं, तो suspend आमतौर पर काम करता है।)

समस्या यह है कि आप पृष्ठभूमि में होने वाली नौकरी की विधियों को गलत समझते हैं। नौकरी के मानक आउटपुट को पुनर्निर्देशित करना असंबंधित है।

वास्तव में, यह अस्पष्ट है जो आप करना चाहते हैं। यदि आप find को चलने से रोकना चाहते हैं, तो fg इसे ^C या ^\ (जो डिफ़ॉल्ट रूप से SIGINT और SIGQUIT क्रमशः भेजें) का उपयोग करें।

यदि आप find चलाना चाहते हैं लेकिन इसके आगे के आउटपुट को दबाएं, तो सबसे आसान समाधान मैं सोच सकता हूं कि bg ; disown ; exit का उपयोग करना है। इससे शैल को अपने बच्चे की प्रक्रिया को मारने से रोक दिया जाएगा (find) और खोल से बाहर निकलें; मान लीजिए कि यह टर्मिनल विंडो के शीर्ष स्तर पर है, आप थोड़ा और आउटपुट देखेंगे और find चलते रहेंगे (लेकिन आपके पास इसके साथ संवाद करने का कोई तरीका नहीं होगा)।

+0

क्या आप वाक्य को स्पष्ट कर सकते हैं "नौकरी के मानक आउटपुट को पुनर्निर्देशित करना असंबंधित है।" –

+2

निश्चित रूप से। एक प्रक्रिया पृष्ठभूमि पृष्ठभूमि का मुख्य प्रभाव यह है कि आपका * इनपुट * (सिग्नल सहित,^जेड की तरह) अब उस प्रक्रिया से सहभागिता नहीं करता है; वे इसके बजाय पैरेंट खोल के साथ बातचीत करते हैं। जब तक यह जांच न हो कि यह पृष्ठभूमि में है या नहीं, यह जांचने के लिए लिखा गया है, आउटपुट अभी भी उस प्रक्रिया से निकल जाएगा। –

+0

रिले: धन्यवाद! –

5

आप किसी भी यूनिक्स की तरह सिस्टम पर stty साथ एक अलग कुंजी के लिए आपरेशन सेट कर सकते हैं।

$ stty susp Q 

क्यूआरआरएल-जेड के स्थान पर आपकी निलंबन कुंजी क्यू करेगा।

+0

प्रतिभाशाली है यही कारण है कि! अब आप $ DEITY का इरादा ("क्यू") के लिए क्यू कुंजी का उपयोग नहीं कर सकते हैं। कूल कमांड के लिए – paxdiablo

+0

+1। –

+0

आपके पास * क्यू, पैक्स का उपयोग करने के लिए * नहीं है। –

0

मुझे लगता है कि आप लिनक्स या यूनिक्स और संभावित रूप से बैश खोल का एक सामान्य संस्करण उपयोग कर रहे हैं। किस मामले में:

CTRL-Z SIGTSTP अग्रभूमि प्रक्रिया को सिग्नल भेजता है। kill -s SIGTSTP [pid] निर्दिष्ट करके आप हत्या आदेश के साथ एक ही काम करने में सक्षम होना चाहिए।

2

मैं आमतौर पर नोहप के साथ इस तरह की चीज करता हूं। इस तरह:

लगता है nohup /> /tmp/myresults.txt &

nohup कि प्रक्रिया को रोकने नहीं करता है सुनिश्चित करता है, भले ही सांत्वना चली जाती है (जैसे, आप विंडो को बंद करने या अपने SSH खोना जो कुछ भी)। ">" कंसोल की बजाय फ़ाइल में आउटपुट भेजता है, और "&" पृष्ठभूमि को पृष्ठभूमि में रखता है।

+0

नोहुप से मुझे अभी एक विचार आया: "स्क्रीन कमांड के साथ इसका उपयोग करने के लिए" जैसे "नोहप स्क्रीन"। यह सहायक हो सकता है। अपने अनुभव को साझा करने के लिए +1 –

+0

आप नोहप के साथ स्क्रीन का उपयोग क्यों करेंगे? स्क्रीन में एक डिटेच फ़ंक्शन अंतर्निहित है। (सी-ए, सी-डी) –

5

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

आप नौकरी पृष्ठभूमि में चलाने के लिए चाहते हैं, यह सही कार्य करें: इसके समाप्त होने पर

find/>/tmp/out 2>&1 & 

तो /tmp/out फ़ाइल का परीक्षण।

+0

क्या आप आमतौर पर>>/tmp/out से पहले 2> & 1 नहीं डालेंगे? (मन, मेरे पास वास्तव में कोई सुराग नहीं है, इसलिए अनदेखा करने के लिए स्वतंत्र महसूस करें।) –

+5

नहीं, @ जेरेमी, क्योंकि यह स्थितित्मक है। मेरा संस्करण फ़ाइल में stdout निर्देशित करता है, फिर stdout (फ़ाइल) के रूप में एक ही स्थान पर stderr। आपका सुझाव stdr (टर्मिनल) के समान स्थान पर stderr को निर्देशित करेगा, फिर फ़ाइल में stdout। और मैं शायद ही कभी प्रश्नों को अनदेखा करता हूं, मैं बल्कि शिक्षित करना चाहता हूं। आपकी टिप्पणी के लिए – paxdiablo

+0

+1 :) –

0

मुझे पता है कि उबंटू 9.04 में, आप इसे पृष्ठभूमि में चलाने के लिए & के साथ प्रक्रिया शुरू कर सकते हैं। उदाहरण के लिए, "sudo gedit /boot/grub/menu.lst &" पृष्ठभूमि में GRUB कॉन्फ़िगरेशन फ़ाइल को संपादित करने वाला एक टेक्स्ट एडिटर प्रारंभ करेगा।

6

मैं अस्वीकार का उपयोग करता हूं।

find/& disown 
exit # close the terminal and the command still runs 

आप जेड के रूप में अच्छी तरह से आप के बाद अस्वीकार उपयोग कर सकते हैं ^:

find/
^Z 
bg 
disown 
exit 

अस्वीकार एक बैश builtin है, मेरा मानना ​​है। अन्य गोले के विकल्पों के बारे में निश्चित नहीं है।

अधिक जानकारी के लिए, my equivalent answer on Server Fault देखें।

+1

+1 आपके व्यवस्थित स्पष्टीकरण के लिए +1 –

संबंधित मुद्दे