टर्मिनल में लॉन्च किए गए एप्लिकेशन को अवांछनीय रूप से बाहर निकलने से कैसे रोकें?


10

मैं इस तरह से आदेशों के साथ टर्मिनल से एप्लिकेशन लॉन्च करता हूं:

/Applications/Mail.app/Contents/MacOS/Mail &

महत्वपूर्ण हिस्सा है  &

  • यूनिक्स / लिनक्स / सोलारिस के लिए:

    • मैंने स्कूल में सीखा है कि  &कार्यक्रम को अपने दम पर जीवंत बनाता है।
    • मुझे दृढ़ता से याद है कि मैं एक कमांड लॉन्च  xeyes &कर रहा हूं और शेल को बंद करने के बाद भी प्रोग्राम को सुरक्षित चलाना।
  • Mac OS X पर (यूनिक्स के अंदर):

    1. मैं एक एप्लिकेशन लॉन्च करता  &हूं और मैं टर्मिनल विंडो बंद करता हूं: एप्लिकेशन बाहर निकलता है!
    2. मैक ओएस एक्स पर यह अवांछनीय व्यवहार क्यों होता है?
    3. इसे कैसे सुधारा जा सकता है ?

संबंधित प्रश्न: apple.stackexchange.com/q/119319/20773
Eric3

जवाबों:


7

आप जो पूरा करना चाहते हैं उसे पूरा करने का "मानक" (ओएस एक्स के साथ-साथ लिनक्स, फ्रीबीएसडी या अन्य प्रणालियों पर) कमांड का उपयोग करना है nohup:

nohup program &

यह शुरू होगा program, जो शेल के सापेक्ष पृष्ठभूमि में चलेगा &- और नोहाप कमांड के कारण हैंगअप संकेतों की अनदेखी करेगा।

इस तरह से आप शेल को बंद करने के बावजूद भी प्रोग्राम चालू रहेगा। इससे कोई फर्क नहीं पड़ता कि आप शेल को बंद कर रहे हैं क्योंकि आप Terminal.app को बंद कर रहे हैं, या आप शेल को बंद कर रहे हैं क्योंकि आप कंप्यूटर पर ssh कनेक्शन से डिस्कनेक्ट कर रहे हैं, या इसी तरह के।


1
यह nohup.outवर्तमान फ़ोल्डर में एक फ़ाइल बनाता है । तब भी जब लिखने के लिए कुछ न हो। कुछ हफ्तों के बाद, nohup.outमेरे मैक में हर जगह फाइलें होंगी । :-(
निकोलस बारबुल्स्को

1
@ नाइकोलाब बार्बुल्स्को nohup command>/dev/null&या तो उपयोग करें या command&disown
लैरी

6

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

ऐसे तरीके हैं जो विभिन्न यूनिक्स मशीन अलग-अलग हो सकते हैं, इसलिए यह संभव है कि आपके द्वारा उपयोग किए जाने वाले विशिष्ट टर्मिनल एमुलेटर या आपके द्वारा उपयोग किए गए विशिष्ट गोले अलग-अलग व्यवहार करें। लेकिन यह ओएस एक्स के लिए विशिष्ट नहीं है। उदाहरण के लिए, उबंटू पर इसी मुद्दे पर एक सवाल है।


6

एम्परसेंड " &" का उपयोग करके , आप शेल की पृष्ठभूमि में प्रक्रिया को चलाने के लिए टर्मिनल बता रहे हैं। इस प्रकार, जब आप शेल को बंद करते हैं (और प्रक्रिया को मारते हैं), तो GUI (Mail.app स्वयं) भी बंद हो जाएगा।

टर्मिनल से मेल लॉन्च करने की सही कमांड बस है:

open -a Mail; exit

संपादित करें: मुझे अभी यह U & L स्टैक एक्सचेंज में मिला: शेल स्क्रिप्ट लाइन के अंत में एम्परसेंड का क्या अर्थ है? प्रदान किए गए उत्तर उत्कृष्ट हैं और वास्तव में बताएंगे कि मैं पहले से कहीं अधिक विस्तार और बेहतर क्या कर रहा हूं! मैं इसके माध्यम से पढ़ने की अत्यधिक सलाह देता हूं।


ऐप में कमांड-लाइन परमेस पास करने के बारे में क्या? इस तरह:/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
निकोलस बारबुल्स्को


किसी विशिष्ट एप्लिकेशन को लॉन्च करने के बारे में क्या, /Applicationsएक विशिष्ट पथ पर नहीं , बल्कि इसमें? जैसे:/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
निकोलस बारबुल्स्को

@NicolasBarbulesco [पूर्ण पथ] खोलें, या निर्देशिका में सीडी और [फ़ाइल] खोलें। आप अपने होम फोल्डर के लिए ~ / का उपयोग कर सकते हैं और विशेष वर्ण, "तारांकन" के रूप में, छोटी संकेतन मान के रूप में कोई अन्य तार मान से मेल नहीं खाता, IE: ~ / De * / Fire * ... et cetera। या बस एक साधारण स्क्रिप्ट लिखें: बिल्ली> नेमफस्क्रिप्ट .. #! / बिन / श .... खुला [पूर्ण पथ] .... ^ D ..... chmod + x nameofscript .....। \ nameofscript .... और वैकल्पिक, mv nameofscript $ PATH / yourpersonalbin। पढ़े लिखे आदमी को खुला पाकर खुश होना। यह एक साधारण कमांड है, और एक साधारण कमांड ट्रेडऑफ़ के रूप में यह उतना शक्तिशाली नहीं है।
njboot

1
क्षमा करें, अभी भी -a तर्क का उपयोग करने की आवश्यकता है:open -a Applications/Mail.app/Contents/MacOS/Mail; exit
njboot

4

मैंने इसका हल ढूंढ लिया है:

(/Applications/Mail.app/Contents/MacOS/Mail &)

यह सरल है, यह सुंदर है, और यह काम करता है!

कोष्ठक  ( )उप-शेल में कमांड लॉन्च करता है।


- और बिना प्रतीक्षा किए प्रोग्राम से शेल पर वापस आ जाता है, इसलिए आप शेल के उपयोग को जारी रख सकते हैं या इसे समाप्त कर सकते हैं, जिस प्रोग्राम से आप बाहर निकल रहे हैं।
r_alex_hall

3

@jksoegaard के पास उचित आदेश हैं लेकिन जैसा कि आपने टिप्पणी में उल्लेख किया है, यह एक nohup.out फ़ाइल बनाता है। Nohup.out फ़ाइल को बनने से रोकने के लिए, आपको STDOUT और STDERR को कहीं और पुनर्निर्देशित करना होगा। पूरा कमांड होगा nohup program &>/dev/null &। यह आपके प्रोग्राम को बैकग्राउंड में चलाएगा, SIGHUP की अनदेखी करेगा और सभी STDOUT और STDERR को / dev / null में भेज देगा।

हालाँकि, अगर आपको nohup जोड़ना पसंद नहीं है (जैसे कि आपके मूल प्रश्न में), तो आप disown -arhSIGHUP को अनदेखा करने के लिए सभी बैकग्राउंड रनिंग जॉब्स को चिह्नित करने के लिए कमांड का उपयोग कर सकते हैं ।


अच्छा जवाब, अभी भी जटिल है। और अच्छी प्रोफ़ाइल छवि। :-)
निकोलस बारबुल्स्को

0

या आप कोशिश कर सकते हैं open -a /Applications/Mail.app

उपयोग: खुला [-ई] [-टी] [-एफ] [-आर] [-आर] [-एन] [-ग] [-एच] [-एस] [- बी] [-ए] [फ़ाइल नाम] [- तर्क तर्क]
मदद: खोल खोल से फ़ाइलें खोलता है।
      डिफ़ॉल्ट रूप से, उस फ़ाइल के लिए डिफ़ॉल्ट एप्लिकेशन का उपयोग करके प्रत्येक फ़ाइल को खोलता है।
      यदि फ़ाइल URL के रूप में है, तो फ़ाइल URL के रूप में खोली जाएगी।
विकल्प:
      -एक निर्दिष्ट आवेदन के साथ खुलता है।
      -b निर्दिष्ट एप्लिकेशन बंडल पहचानकर्ता के साथ खुलता है।
      -ए टेक्स्टएडिट से खुलता है।
      -t डिफ़ॉल्ट पाठ संपादक के साथ खुलता है।
      -f मानक इनपुट से इनपुट पढ़ता है और TextEdit के साथ खुलता है।
      -F --fresh विंडोज़ को पुनर्स्थापित किए बिना, ऐप को नए सिरे से लॉन्च करता है। सहेजे गए लगातार राज्य खो गया है, शीर्षकहीन दस्तावेजों को छोड़कर।
      -R, --reveal खोलने के बजाय फाइंडर में चयन करता है।
      -W, - एप्लिकेशन को तब तक ब्लॉक करें जब तक कि उपयोग किए गए एप्लिकेशन बंद न हो जाएं (भले ही वे पहले से चल रहे हों)।
          -आर्ग शेष सभी वादों को अरगव में आवेदन के मुख्य () फ़ंक्शन के बजाय खोला गया है।
      -n, --new एप्लिकेशन का एक नया उदाहरण खोलें, भले ही वह पहले से चल रहा हो।
      -j, --हाइड छिपा हुआ ऐप लॉन्च करता है।
      -g, - बैकग्राउंड एप्लिकेशन को अग्रभूमि में नहीं लाता है।
      -h, --header हेडर के लिए दिए गए फ़ाइलनाम से मेल खाता हेडर खोजता है, और उन्हें खोलता है।
      -s For -h, SDK उपयोग करने के लिए; यदि आपूर्ति की जाती है, तो केवल एसडीके जिनके नाम में तर्क मूल्य है, खोजे जाते हैं।
                        अन्यथा प्रत्येक प्लेटफॉर्म में उच्चतम संस्करण एसडीके का उपयोग किया जाता है।

-2

मैंने एक उपाय खोजा है: बुराई से बुराई से लड़ना।

मैं इस तरह के कमांड के साथ अपना ऐप लॉन्च करता हूं:

/Applications/Mail.app/Contents/MacOS/Mail & exit

खोल एक बार में बाहर निकलता है। और ऐप बच जाता है, भले ही मैं टर्मिनल विंडो बंद कर दूं।

लेकिन यह समाधान बहुत उपयोगी नहीं है।


1
आपको वास्तव में ऐसे एप्लिकेशन खोलने चाहिए जो खुले में बंडल किए गए हों । यह भविष्य के प्रमाण के रूप में बंडल सामग्री के साथ-साथ विहित परिवर्तन है।
इयान सी

@ इयान - यहाँ मुझे विशेष रूप से उन अनुप्रयोगों को खोलने में दिलचस्पी है जो एक विशिष्ट पथ पर हैं, न कि /Applicationsमेरे मैक के साथ और न ही बंडल में।
निकोलस बारबुल्स्को

1
.appफ़ोल्डरों को "बंडल" कहा जाता है, और openकमांड उन्हें लॉन्च कर सकता है चाहे वे /Applicationsफ़ोल्डर में हों या किसी अन्य फ़ोल्डर में। इस संदर्भ में "बंडल" शब्द का अर्थ "ओएस एक्स के साथ भेजना" नहीं है।
कोई भी

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