मैं वर्तमान में चल रही लिनक्स प्रक्रिया को कैसे पृष्ठभूमि में रख सकता हूं? [बन्द है]


111

मेरे पास एक कमांड है जो लिनक्स शेल से रिमोट सर्वर पर git का उपयोग करके फाइलें अपलोड करता है और इसे खत्म करने में कई घंटे लगेंगे।

मैं उस रनिंग प्रोग्राम को बैकग्राउंड में कैसे रख सकता हूं? ताकि मैं अभी भी शेल पर काम कर सकूं और यह प्रक्रिया भी पूरी हो जाए?


बस एक अनुमान है लेकिन क्या आपने ctrl + z या इस तरह अपनी कमांड चलाने की कोशिश की; #command
EralpB

आदेश पहले से ही चल रहा है इसलिए मेरे पास अन्य विकल्प नहीं है। मुझे यकीन नहीं है कि कौन सी कोशिश करने की आज्ञा है। मैं वर्तमान प्रक्रिया को तोड़ना नहीं चाहता था इसलिए मैंने इसे प्रयोग नहीं किया
मिराज

हमें और अधिक पेशेवर उत्तर की प्रतीक्षा करनी चाहिए :) मेरा मतलब था कि यदि आपके पास फिर से शुरू करने का मौका है। (आज्ञा और बात)
EralpB

इस प्रश्न पर स्वीकृत उत्तरदाता उन तीन चरणों की व्याख्या करता है जिन्हें लेने की आवश्यकता है: stackoverflow.com/questions/625409/…
लियोनार्ड सेर्स

आप सिर्फ पोटीन का दूसरा उदाहरण भी खोल सकते हैं और एक और शेल प्राप्त करने के लिए फिर से सर्वर से कनेक्ट कर सकते हैं। हालांकि के साथ समाधान ctrl+zमहान है।
इला El२ El२

जवाबों:


207

CTRL + Z के साथ प्रक्रिया को स्थगित करें bgफिर इसे पृष्ठभूमि में फिर से शुरू करने के लिए कमांड का उपयोग करें । उदाहरण के लिए:

sleep 60
^Z  #Suspend character shown after hitting CTRL+Z
[1]+  Stopped  sleep 60  #Message showing stopped process info
bg  #Resume current job (last job stopped)

मैनुअल पेज bgमें नौकरी नियंत्रण और उपयोग के बारे में अधिक जानकारी bash:

नौकरी नियंत्रण
टाइपिंग सस्पेंड कैरेक्टर (आमतौर पर ^ Z, कंट्रोल-जेड) जबकि एक प्रोसेस चल रहा होता है, उस प्रोसेस को रोक दिया जाता है और कंट्रोल को बैश कर देता है। [...] उपयोगकर्ता पृष्ठभूमि में इसे जारी रखने के लिए bg कमांड का उपयोग करते हुए इस नौकरी की स्थिति में फेरबदल कर सकता है, [...]। A ^ Z तुरंत प्रभाव डालता है, और लंबित आउटपुट और टाइप-हेड को छोड़ने का अतिरिक्त दुष्प्रभाव होता है।

bg [ jobspec ...] बैकग्राउंड में
प्रत्येक निलंबित जॉब स्पेस को फिर से शुरू करें , जैसे कि इसे & के साथ शुरू किया गया था। यदि जॉबस्पेक मौजूद नहीं है, तो वर्तमान नौकरी की शेल की धारणा का उपयोग किया जाता है।

संपादित करें

एक प्रक्रिया शुरू करने के लिए जहां आप टर्मिनल को मार सकते हैं और यह अभी भी चल रहा है

nohup [command] [-args] > [filename] 2>&1 &

जैसे

nohup /home/edheal/myprog -arg1 -arg2 > /home/edheal/output.txt 2>&1 &

केवल आउटपुट को अनदेखा करने के लिए (बहुत बुद्धिमान नहीं) फ़ाइल नाम को बदल दें /dev/null

किसी भिन्न फ़ाइल में त्रुटि संदेश सेट करने के &1लिए फ़ाइल नाम बदलें ।

इसके अलावा: आप jobsउन पृष्ठभूमि वाली प्रक्रियाओं की अनुक्रमित सूची देखने के लिए कमांड का उपयोग कर सकते हैं । और आप एक पृष्ठभूमि वाली प्रक्रिया को चलाकर kill %1या kill %2संख्या को प्रक्रिया के सूचकांक के साथ मार सकते हैं ।


मैंने इसकी कोशिश की, लेकिन इसके कुछ आउटपुट के रूप में, यह फिर से% के साथ अग्रभूमि पर आ गया है जिसमें दिखाया गया है कि कितना डेटा अपलोड किया गया है
Mirage

प्रक्रिया टर्मिनल को कोई भी आउटपुट लिखती है जैसा कि आपने प्रक्रिया को शुरू में करने का निर्देश दिया था। फ़ाइल या लिखने के लिए आउटपुट प्राप्त करने के लिए आपको इसे पुनरारंभ करना होगा /dev/null। ऊपर संपादित देखें।
एड हील

तो इसका मतलब है, यदि प्रक्रिया पहले ही शुरू हो गई है, तो किसी भी तरह से ouput को पुनर्निर्देशित नहीं किया गया है
Mirage

हाँ सचमुच। आप इस प्रक्रिया को केवल उस शेल को प्रभावित नहीं कर सकते जो इससे चल रहा है। आप एक कर सकते हैं kill -9 <pid of your shellऔर फिर प्रक्रिया अभी भी चलेगी और आउटपुट को फेंक दिया जाएगा - लेकिन आपको एक नया शेल शुरू करने के लिए फिर से लॉगिन करना होगा।
एड हील

disownयदि आप अपने टर्मिनल सत्र से लॉग आउट करने की आवश्यकता है, तो आप कमांड का उपयोग भी कर सकते हैं , और आप इसे जारी रखना जारी रखना चाहेंगे।
किर्क रोएरिग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.