कमांड लाइन से GUI लाइनक्स प्रोग्राम कैसे शुरू करें, लेकिन कमांड लाइन से अलग?


89

मैंने पहले भी इसके लिए खोज की है, लेकिन कभी कोई उत्तर नहीं खोज पाया।

विंडोज में, अगर मेरे पास कंसोल विंडो खुली है, तो टाइप करें winmine, और एंटर दबाएं, माइन्सवीपर दिखाई देगा, जो पूरी तरह से cmd प्रोग्राम से अलग होगा। माइनस्वीपर का उदाहरण कमांड प्रॉम्प्ट के साथ किसी भी तरह से जुड़ा हुआ नहीं है, मुझे पता है कि माइन्सवेपर के माता-पिता को कमांड प्रॉम्प्ट के उस उदाहरण के लिए सेट किया गया है। हालांकि यह लिनक्स में अलग है।

लिनक्स में, यदि मेरे पास एक कंसोल विंडो खुली है, तो टाइप करें emacsऔर एंटर दबाएं, Emacs खुल जाएगा, लेकिन यह कमांड लाइन से बंधा हुआ लगता है। विशेष रूप से, ऐसा प्रतीत होता है कि मैं कमांड लाइन का उपयोग तब तक नहीं कर सकता जब तक कि एमएसीएस का उदाहरण बंद नहीं हो जाता। क्या लिनक्स में विंडोज व्यवहार को दोहराने का एक तरीका है?

धन्यवाद!


1
का डुबकी: सुपरयुसर.
com

कृपया geekosaur का जवाब दें।
जोशुआ रोबिसन

windows7 में यह माइन्सवेपर है। यहाँ C: \ Program Files \ Microsoft गेम्स \ Minesweeper है, इसलिए माइन्सवेपर। आम तौर पर यह काम नहीं करेगा .. क्योंकि यह निर्देशिका पथ में नहीं है .. और किसी भी तरह, आपको विंडोज़ संस्करण
बारलोप

जवाबों:


10

में bash, detachएक अंतर्निहित है, निम्नानुसार उपयोग किया जाता है:

emacs &
detach %+ # or % + the number in brackets printed after the above

में zsh, आप पृष्ठभूमि कर सकते हैं और एक ही आपरेशन में अलग:

emacs &|

108

संलग्न &कमांडलाइन रहे हैं:

emacs &

यह पृष्ठभूमि में emacs डालेगा और आपको अपने टर्मिनल का उपयोग जारी रखने में सक्षम करेगा।

ध्यान दें कि यह अभी भी emacs को आपके टर्मिनल की उप-प्रक्रिया के रूप में छोड़ देगा, और जब आप टर्मिनल से बाहर निकलेंगे तो यह emacs से भी बाहर निकल जाएगा। इससे बचने के लिए टाइप करें:

(emacs &)

कोष्ठक टर्मिनल से emacs प्रक्रिया को अलग करने के लिए टर्मिनल को बताते हैं।

फिर भी, कार्यक्रम से स्टडआउट और स्टडर संदेश टर्मिनल पर दिखाई देंगे। इसे रोकने के लिए, उपयोग करें:

(emacs &> /dev/null &)

9
मुझे विशेष रूप से (emacs &) टिप पसंद है।

1
यदि आपने पहले ही कार्य (इमैंक्स) शुरू कर दिया है, तो सोने के लिए CTRL-Z का उपयोग करें और फिर पृष्ठभूमि में भेजने के लिए कमांड "bg" का उपयोग करें।
जयन

@StackTrace: यदि आप ऐसा करते हैं, और आप अपने टर्मिनल को बंद कर देते हैं, तो यह emacs को भी मार देगा।
नाथन फ़ेलमैन

1
ठीक है .. मैं "नोहप" का इस्तेमाल करता था। प्रक्रिया शुरू होने के बाद यह नहीं किया जा सकता है ...
जयन

जब टर्मिनल विंडो में Ctrl+ Cइस कमांड को दबाया जाता है , तो प्रक्रिया को मार दिया जाता है: <
रिचर्ड डी विट

21

का उपयोग करें nohup। ऐशे ही:nohup amarok &

उम्मीद है की यह मदद करेगा।


19

मैंने विभिन्न स्रोतों के उत्तरों के साथ इसी तरह के विषय के एक पुराने धागे का उत्तर पोस्ट किया । इस धागे के लिए अनुकूलित उत्तर की एक प्रति निम्नलिखित है।


निम्नलिखित कार्य:

$ (gui_app &> /dev/null &)

यह नाथन फ़ेलमैन का उत्तर प्लस पुनर्निर्देशन है।

"&> / dev / null" nd डिवाइस को stdout और stderr दोनों को पुनर्निर्देशित करता है। अंतिम एम्परसैंड पृष्ठभूमि में प्रक्रिया को चलाता है। कमांड के चारों ओर के कोष्ठक आपके "gui_app" को सबस्क्रिप्शन में चलाने का कारण बनेंगे।

ऐसा करने से आप इस कमांड को निष्पादित करने वाले कंसोल से "gui_app" प्रक्रिया को अलग कर देंगे। तो भले ही आप विंडो पेरेंट टर्मिनल एमुलेटर बंद कर रहे हों, "gui_app" बंद नहीं होगा। मैंने इसे चलाया और फिर "प्रीट्री" कमांड के साथ प्रोसेस ट्री को देखा और पाया कि इस तरह से "इनिट" के लिए चाइल्ड प्रोसेस बन जाएगा।

उदाहरण के लिए,

$ gui_app &> /dev/null &

एप्लिकेशन को पृष्ठभूमि में चलाएगा, लेकिन यह कंसोल प्रक्रिया का एक चाइल्ड प्रोसेस बन जाएगा और टर्मिनल बंद करने पर समाप्त हो जाएगा। (हालांकि बाहर निकलने के आदेश या Ctrl-D का उपयोग करके बश के माध्यम से टर्मिनल से बाहर निकलें, बैकग्राउंड प्रोसेस को init में सौंपने से बैश को साफ कर देगा।)

"nohup" काम करता है क्योंकि NawaMan ने सुझाव दिया है, लेकिन यह डिफ़ॉल्ट रूप से फ़ाइल में आउटपुट और त्रुटि को पुनर्निर्देशित करता है। जैसा कि जेफ़जी ने उत्तर दिया है, "डिसऑन" कमांड (यदि शेल में उपलब्ध है) एक बैकग्राउंड प्रक्रिया शुरू करने के बाद टर्मिनल से प्रक्रिया को अलग कर सकता है:

$ gui_app &
$ disown

(यह सब bash पर लागू होता है। मुझे यकीन है कि अन्य गोले में ऐसा करने के लिए अन्य तरीके / वाक्यविन्यास हैं।)

कुछ संदर्भ: डिसइंगिंग प्रोसेस (यूनिक्स पावर टूल्स)

यदि यह GUI अनुप्रयोग के लिए एक सरल कॉल है - बिना जटिल विकल्पों के और ऐसे - यह "gmrun" या dmenu (चेतावनी: लाउड ऑडियो) जैसे लॉन्चर का उपयोग करना भी एक अच्छा विकल्प है। इसे एक प्रमुख संयोजन से बांधें। मैं अभी तक एक लांचर का उपयोग नहीं करते हैं, लेकिन उन दोनों की कोशिश की है।

ध्यान दें: अन्य थ्रेड रिपोर्ट्स के GUI ऐप्स "gui_app &" विधि के माध्यम से शुरू की गई टिप्पणी में CarlF तब बंद होता है जब वह मूल टर्मिनल से बाहर निकलता है। मुझे लगता है कि हम टर्मिनल को अलग-अलग तरीकों से बंद कर रहे थे। मैं उस विंडो को बंद कर रहा था जिसमें टर्मिनल एमुलेटर चल रहा था। मुझे लगता है कि वह शेल (एक्जिट कमांड या Ctrl-D) के माध्यम से टर्मिनल एमुलेटर से बाहर निकल रहा होगा। मैंने यह परीक्षण किया और देखा कि बैश के माध्यम से बाहर निकलना जीयूआई को बंद नहीं करता है क्योंकि टर्मिनल की पृष्ठभूमि प्रक्रिया के रूप में कार्लएफ कहते हैं। ऐसा लगता है कि जब इसे साफ करने का मौका दिया गया, तो यह इनिट में बैकग्राउंड प्रोसेस से हाथ धोता है। वास्तव में, यह वह तंत्र होना चाहिए जिसके द्वारा एक उपधारा में शुरू की गई पृष्ठभूमि प्रक्रिया init को सौंप दी जाती है।


11

उपयोग-लिनेक्स में एक उपकरण शामिल होता है जिसे सेटसाइड कहा जाता है जो मूल रूप से वह करता है जो अलग होता है:

$ setsid someprogram

यह someprogramएक नए सत्र में चलेगा ।


9

xemacs &पृष्ठभूमि में XEmacs खोलने का प्रयास करें ।

कृपया इसे "विंडोज़ व्यवहार का अनुकरण" के रूप में संदर्भित न करें। आउच।

आप यह भी कर सकते हैं:

  • एक नया टर्मिनल खोलें
  • टर्मिनल का उपयोग करने के बजाय, प्रोग्राम लॉन्च करने के लिए Alt + F2 या अपने विंडो मैनेजर का उपयोग करें
  • GNU स्क्रीन का उपयोग करें

7

मैंने निम्नलिखित कोड को "साइब पृष्ठभूमि" के लिए "sbg" नामक एक निष्पादन योग्य स्क्रिप्ट फ़ाइल में रखा। यह शेल से शुरू किए जा रहे प्रोग्राम को पूरी तरह से डिस्कनेक्ट करने के लिए सभी आवश्यक चीजें करता है: / से /dev/null, स्टेपआउट को अनदेखा करता है , हैंगअप को अनदेखा करता है, पृष्ठभूमि में चलाता है, और अलग करता है।

#!/bin/bash
nohup "$@" &>/dev/null & disown %%

तब आप बस कर सकते हैं sbg emacs। आप किसी भी तर्क आप करना चाहते हैं पारित कर सकते हैं: sbg emacs --daemon FILE1 FILE2


स्क्रिप्टिंग समाधान ने मेरे लिए सबसे अच्छा काम किया। धन्यवाद!! हालाँकि मैंने (gui_app &> /dev/null &)इसके बजाय (@ EMPraptor का जवाब) इस्तेमाल किया था
जिमी ओके


3

यदि आप बैश का उपयोग कर रहे हैं, तो आप इस प्रक्रिया को समाप्त कर सकते हैं:

% firefox &
% disown 


1

जैसा कि अन्य उत्तर कहते हैं, आप निम्नलिखित का उपयोग कर सकते हैं:

$ emacs &

यदि आप &हालांकि भूल जाते हैं , Ctrl-zतो बस प्रेस करें bg:

[1]+  Stopped                 emacs
$ bg
[1]+ emacs &
$

FYI करें: Ctrl-zEmacs प्रक्रिया को रोकता है और bgपृष्ठभूमि में भेजता है।


0

जैसे कि टर्मिनल से जुड़ी प्रक्रिया &को $ x &छोड़ता है, वैसे ही मैंने detach http://inglorion.net/software/detach/ नामक एक छोटा सा प्रोग्राम चुना है, जिसे मैंने अलियास किया है क्योंकि dयह थोड़ा सा है, nohupलेकिन मैं एक लॉग फाइल के पीछे नहीं जाता mupdf को अलग करने के लिए इसका उपयोग करें :d mupdf x.pdf


0

इसे अपने पास रखें ~/.bashrc:

debug_trap_skip()
{
    local cmd_type=$(type -t "$1")

    # Empty cmd_type is for inexistent command or variable definition, exclude them
    # and shell builtins except echo, set and env:
    [[ -z "$cmd_type" || "$cmd_type" = builtin && "$1" != echo && "$1" != set && "$1" != env ]] &&
        return 0

    return 1
}

debug_trap_x11()
{
    if ldd `which $1`|grep -q libX11
    then
        setsid "$@"
        return 0
    fi
    return 1
}

debug_trap()
{
    [[ -n "$COMP_LINE" ]] && return  # do nothing if completing
    [[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ]] && return
    debug_trap_skip $BASH_COMMAND && return 0
    debug_trap_x11 $BASH_COMMAND && return 1

    return 0
}

shopt -s extdebug
trap debug_trap DEBUG

अब आपको याद नहीं है कि कौन से प्रोग्राम X11 हैं और उनके लिए विशेष जोड़तोड़ करते हैं क्योंकि वे स्वचालित रूप से अलग हो जाएंगे। ध्यान दें कि पिछले एक setsidसे बेहतर है nohupक्योंकि HUP सिग्नल को ब्लॉक करता है जो कि आपकी जरूरत नहीं है।

PS अब आप winmineलिनक्स में पहले से ही मौजूद हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.