टर्मिनल से पृष्ठभूमि में चल रहे कार्यक्रम


136

मैं प्रोग्राम को चलाने के दौरान शेल को बंद करने की क्षमता के साथ, शेल की पृष्ठभूमि में प्रोग्राम कैसे चला सकता हूं? कहते हैं कि मेरे UI को समस्याएँ हैं या किसी कारण से, मुझे टर्मिनल विंडो से एक प्रोग्राम को बूट करने की आवश्यकता है, कहते हैं nm-applet:

nm-applet

जब यह शुरू होता है, तो यह टर्मिनल विंडो के अग्र भाग में रह जाता है।

क्या टर्मिनल को खुला छोड़ने की आवश्यकता के बिना कार्यक्रम को चलाने का कोई सरल तरीका है या यह पूरे टर्मिनल पर कब्जा कर सकता है?

उस नोट पर, मुझे टर्मिनल से प्रोग्राम चलाने का एक तरीका मिल गया और इसने &कमांड के लिए एक एम्पर्सैंड ( ) को जोड़कर अन्य इनपुट के लिए अनुमति दी :

nm-applet &

लेकिन यह बहुत उपयोग नहीं है क्योंकि टर्मिनल बंद होने के बाद टर्मिनल में शुरू होने वाली किसी भी प्रक्रिया को मार दिया जाता है।                                                                        


7
nohup 'कमांड' और यह काम करने लगता है। इसके साथ कोई समस्या?
0

जवाबों:


173

मैं हाल ही में पसंद आया हूं setsid। ऐसा लग रहा है कि आप बस टर्मिनल से कुछ चला रहे हैं, लेकिन आप डिस्कनेक्ट कर सकते हैं (टर्मिनल को बंद कर सकते हैं) और यह बस चलता रहता है।

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

एक उदाहरण:

setsid gnome-calculator

मैं भी काफी आंशिक हूं, disownजिसका उपयोग वर्तमान पेड़ से एक प्रक्रिया को अलग करने के लिए किया जा सकता है। आप इसे बैकग्राउंडिंग एम्परसेंड के संयोजन में उपयोग करते हैं:

gnome-calculator & disown

मैं भी सिर्फ लघुकोष्ठक के साथ उप-शुक्राणु के बारे में सीखा। यह सरल विधि काम करती है:

(gnome-calculator &)

और निश्चित nohupरूप से जैसा कि आपने उल्लेख किया है। मैं इस बारे में जंगली नहीं हूँ nohupक्योंकि इसमें ~/nohup.outमुझे बिना पूछे इसे लिखने की प्रवृत्ति है। यदि आप उस पर भरोसा करते हैं, तो यह आपके लिए हो सकता है।

nohup gnome-calculator

और लंबी अवधि की प्रक्रियाओं के लिए, ऐसी चीजें screenऔर अन्य वर्चुअल टर्मिनल-मक्सर्स हैं जो कनेक्शन के बीच सत्र को जीवित रखते हैं। ये शायद आप पर वास्तव में लागू नहीं होते क्योंकि आप टर्मिनल आउटपुट के लिए अस्थायी पहुँच चाहते हैं, लेकिन अगर आप कुछ समय बाद वापस जाना चाहते हैं और नवीनतम टर्मिनल गतिविधि देखना चाहते हैं, तो स्क्रीन संभवतः आपका सबसे अच्छा विकल्प होगा।

इंटरनेट screenट्यूटोरियल से भरा है, लेकिन यहाँ एक सरल त्वरित शुरुआत है:


ओली, DISPLAY के मामले में =: 0 एकता - जिसमें से आप किसका उपयोग करेंगे और क्यों?
नट्टी के बारे में अखरोट

4
@nuttyaboutnatty अपने शेल सत्र में पूरे लॉट को लपेटता है sh -c "sleep 10s && cvlc '/home/omm.ogg'" & disown:। यह बहुत अच्छी तरह से बाहर कांटे यह सुनिश्चित करने के लिए सब कुछ के लिए मेरा समाधान है।
ओली

1
@nuttyaboutnatty यही मेरा मतलब है लेकिन आप दो उदाहरणों के साथ नहीं चलेंगे क्योंकि --replaceऐसा लगता है और वास्तव में पुराने उदाहरण को समाप्त करता है। इसे दूसरी बार xsession के भीतर चलाने से TTYn से जुड़ी कॉपी समाप्त हो जाएगी और अगर जरूरत पड़ने पर आप भविष्य में इसका इस्तेमाल करेंगे। ऐसा करने का शायद एक बेहतर तरीका है, लेकिन हर बार मेरे दिमाग में वही आता है जिसकी मुझे जरूरत होती है।
ओली

1
बिल्कुल सही, जो मेरे लिए काम करता था वह था सबस्क्रिप्शन '(सूक्ति-कैलकुलेटर और)'। मैं इसका इस्तेमाल बैकग्राउंड में मोनो कंसोल ऐप लॉन्च करने के लिए करता हूं। अन्य तकनीकों के साथ, मोनो ऐप तुरंत दुर्घटनाग्रस्त हो जाएगा।
निकोलेस जॉर्जियो

2
भविष्य उपयोगकर्ताओं के लिए नोट : के निर्माण के nohup.outदोनों stdout और sterr पुनः निर्देशित के साथ दबा दिया जा सकता है /dev/nullताकि तरह:nohup firefox &> /dev/null &
सर्गी Kolodyazhnyy

55

यहाँ दो तरीके हैं जिनके साथ मैं जाऊँगा। सबसे पहले, इसे एक टर्मिनल से नहीं चलाना; हिट डायलॉग खोलने के लिए Alt+ F2और इसे वहां से चलाएं (बिना और)।

एक टर्मिनल से, भागो

nm-applet &

लेकिन टर्मिनल को स्वयं बंद न करें। यही है, एक्स-बटन को बंद करने के लिए मत मारो, और फ़ाइल का उपयोग न करें -> इसके मेनूबार से बाहर निकलें। यदि आप टर्मिनल को इस तरह से बंद कर देते हैं, तो यह भीतर चलने वाले बैश को एक HUP (Hang UP) सिग्नल भेज देगा, जो बदले में HUP सिग्नल को उसके सभी बच्चों को भेज देगा (यही वजह है कि इस मामले में nohup काम करता है)।

इसके बजाय, शेल चलाकर exitया मारकर बाहर निकलें Ctrl+ D। बैश तो अपने बच्चों को, फिर बाहर निकल जाएगा, पृष्ठभूमि प्रक्रियाओं को अभी भी चल रहा है। और जब बैश बाहर निकलता है, तो टर्मिनल ने अपनी बाल प्रक्रिया खो दी है, इसलिए यह भी बंद हो जाएगा।

यह सब एक ही बार में करना:

nm-applet & exit

वह आश्चर्यजनक है! कभी नहीं पता था कि और आप इस बात का उल्लेख करने वाले एकमात्र व्यक्ति प्रतीत होते हैं। निश्चित रूप से जब डेस्कटॉप वातावरण में मेरा पसंदीदा दृष्टिकोण है। बहुत बुरा मैं ज्यादा नहीं
बढ़ा सकता

मैंने इसे एक अलग एप्लिकेशन के साथ आज़माया और यह विफल रहा: matlab & exitदो अलग-अलग कमांडों के रूप में काम करना अच्छा रहा:matlab & exit
मैटकेली

मैं सोच रहा था कि ओपी ने कहा कि टर्मिनल को बंद करने से उनकी पृष्ठभूमि के कार्यक्रम क्रैश हो गए। मैंने कभी विंडो पर "x" बटन द्वारा टर्मिनल बंद करने की कोशिश नहीं की है।
user1717828

एक्स बटन मार रहा है यह साफ रूप से बाहर नहीं निकलता है, निकास आदेश करता है। आप इसके बजाय एक एक्सट्रीम कमांड पर x बटन को रीमैप कर सकते हैं ...
टिम बेकर

14

जैसा आपने बताया, आप दौड़ सकते हैं

nohup nm-applet &  

टर्मिनल को बंद करते समय अंतिम संकेत को अनदेखा करना। उस के साथ कोई समस्या नहीं।


कोई अन्य विकल्प? सिर्फ जानने के लिए, किसी और चीज के लिए नहीं
OVERTONE

विकिपीडिया ( en.wikipedia.org/wiki/Nohup ) में उपयोग करने का सुझाव है, echo command | at nowजो मुझे काम करने के लिए नहीं मिला।
देसुआ

2
मुझे आश्चर्य है कि जब आप आइकन या प्रोग्राम पर डबल क्लिक करते हैं तो यह UI से कैसे काम करता है।
overtone

execnohup <command> &पृष्ठभूमि में एक प्रक्रिया चलाने और वर्तमान शेल शीघ्र वापस करने के लिए एक विकल्प प्रदान करता है ।
JSStuball

12

एक बात जो कई अन्य उत्तर याद आ रही है वह यह है कि वर्तमान में शेल को ब्लॉक करने वाली प्रक्रिया को कैसे अलग किया जाए। अधिकांश टर्मिनलों और शेल में, Ctrl+ Zचल रही प्रक्रिया को रोक देगा और आपको इनपुट प्रॉम्प्ट पर वापस लाएगा। फिर, आप जारी कर सकते हैं

bg

पृष्ठभूमि में चल रही प्रक्रिया को भेजने के लिए। मुद्दा

fg

बजाय चल रही प्रक्रिया को अग्रभूमि में वापस लाने के लिए।

संपादित करें : इस उत्तर में और अधिक विस्तार मैंने बाद में खोजा।


7

(exec PROGRAM &> /dev/null & )उपखंड के पीआईडी ​​की अनुमति लेने के लिए उपयोग करें PROGRAM। मैंने कई अलग-अलग कार्यक्रमों के साथ कई बार इस दृष्टिकोण का परीक्षण किया है। मूल टर्मिनल को बंद करने से नव-प्रायोजित कार्यक्रम पर कोई प्रभाव नहीं पड़ता है

छोटा डेमो:

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working

हममम (exec firefox)टर्मिनल लटकी हुई है जब तक मैं फ़ायरफ़ॉक्स से बाहर निकलने के ... और टर्मिनल SIGHUPs खोल और subshell बंद करने
Kos

मैंने अपना उत्तर संपादित कर दिया है। कई अन्य कार्यक्रमों के साथ इसका परीक्षण किया। मैंने फ़ायरफ़ॉक्स या अन्य प्रोग्राम को इस संस्करण में कंट्रोलिंग टर्मिनल को लटकाते हुए नहीं देखा है
सर्जियो कोलोडियाज़नी

मेरे लिए अच्छा काम करता है
Zanna

मुझे विश्वास नहीं है कि बैश के निष्पादन का उपयोग करना आवश्यक है, यह हो सकता है कि आपको किसी कारण से पीआईडी ​​की आवश्यकता हो।
मारिनारा

2

मैं बायोबू टर्मिनल की सिफारिश कर सकता हूं। आप आसानी से F6 कुंजी दबाकर अपनी प्रक्रिया को अलग कर सकते हैं।


1

यद्यपि ऊपर अच्छे उत्तर हैं, मैं पृष्ठभूमि में MATLAB का उपयोग करने के तरीके पर अपने 2 सेंट देना चाहूंगा।

sudo -b matlab

-bSudo का टैग पृष्ठभूमि में एप्लिकेशन चला सकता है। आप इस कमांड को निष्पादित करने के बाद टर्मिनल को बंद भी कर सकते हैं।

शायद, असंबंधित लेकिन अद्भुत वेबसाइट है जिसका उपयोग आप शेल कमांड को समझाने के लिए कर सकते हैं। http://explainshell.com/explain/8/sudo


0

मैं इसका सही तरीका नहीं जानता लेकिन मैं पिछले सत्र को छोड़ते हुए एक और सत्र शुरू करता हूं। उदाहरण के लिए मैंने अपने रास्पबेरी पर एक साधारण वेब सर्वर चलाया। web.py एक। तब मैं इसे छोड़ते हुए एक नया सत्र शुरू करता हूं। बस। यह तब भी उपयोगी है जब आप दूसरे सत्र में कार्यशील होते हुए भी अपडेट किए जाते हैं।


2
उबंटू पूछने के लिए आपका स्वागत है! मैं सलाह देता हूं कि इस उत्तर को संपादित करने के लिए इसे विशिष्ट विवरण के साथ विस्तारित करें कि यह कैसे करना है। (यह भी देखें कि मैं एक अच्छा उत्तर कैसे लिख सकता हूं? सामान्य सलाह के लिए किस तरह के उत्तर उबंटू उकबे पर सबसे अधिक मूल्यवान माने जाते हैं।)
डेविड फ़ॉस्टर

0

यदि केडीई का उपयोग किया जाता है, तो आप उसका उपयोग भी कर सकते हैं kstart, जो टर्मिनल से अलग किया गया आपका कार्यक्रम शुरू करेगा। यह भी सुनिश्चित करता है कि KDE वातावरण सही रूप से कमांड के लिए सेटअप है। ( kstart.cppसंदर्भ के लिए स्रोत कोड देखें । जैसा कि आप वहां से देखते हैं, यह उपयोग करता है KProcess::startDetached, और इससे KProcessप्राप्त होता है QProcess, और startDetachedएक नई प्रक्रिया शुरू करता है, और इसके बारे में बताता है।)

इसी प्रकार यह भी है kde-openया xdg-openया gnome-open


जैसा कि यह खड़ा है, यह एक उत्तर की तुलना में लगभग एक टिप्पणी की तरह दिखता है। कृपया विस्तार करने के लिए संपादित करें। बस एक लाइनर मत दो; स्पष्ट करें कि आप सही क्यों हैं, आदर्श रूप से उद्धरणों के साथ। स्पष्टीकरण के बिना उत्तर हटाने के अधीन हैं।
अनाम 2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.