आप सीधे पृष्ठभूमि पर कमांड लाइन ऐप कैसे भेजते हैं?


22

मुझे पहले से ही पता है कि दबाने ctrl+zसे ऐप बंद हो जाता है, फिर मैं ऐप को bgकमांड के साथ बैकग्राउंड में भेज सकता हूं , लेकिन इसका मतलब है कि ऐप के बंद होने का एक संक्षिप्त समय है।

मैं ऐप को बिना रुके सीधे बैकग्राउंड में कैसे भेजूं?


अगर आप पहले से ही चल रहे हैं, तो यकीन है कि आप नहीं कर सकते।
केविन

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

@ जो शांत है, लेकिन मेरे कहने का मतलब बिल्कुल नहीं। मैं बस इसे रोक दिए बिना सीधे पृष्ठभूमि में एक ऐप भेजना चाहता हूं। यानी ctrl+zकमांड को चलाए बिना दबाव डाले bg। क्या ऐप को बैकग्राउंड में भेजने के लिए सिंगल कीस्ट्रोक कॉम्बो है?
trusktr

जवाबों:


17

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

एक करीबी सन्निकटन पृष्ठभूमि को एप्लिकेशन को वास्तव में तेजी से भेजने के लिए है। सब के बाद, एक आवेदन दूसरों के साथ सीपीयू समय साझा करता है और एक सेकंड के कुछ सौवें हिस्से पर विराम नहीं होना चाहिए। (यह वास्तविक समय के अनुप्रयोगों के लिए करता है, इसलिए पृष्ठभूमि में उन लोगों को शुरू करना सुनिश्चित करें।) मैं Ctrl+ के लिए एक शेल बाइंडिंग का उपयोग करता हूं Zजो अंतिम-अग्रभूमि वाली नौकरी को पृष्ठभूमि में भेजता है। इस तरह से, दबाने Ctrl+ Z Ctrl+ Zकम से कम निलंबन समय के साथ पृष्ठभूमि के लिए एक नौकरी भेजता है।

यहाँ मेरी ज़िश बाइंडिंग है, जो कमांड लाइन खाली न होने पर भी “आधा” टाइप कर देता है

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

दर्शकों में गैर-ज़श-उपयोगकर्ताओं के लिए अंग्रेजी में:

  • एक शेल फ़ंक्शन को परिभाषित करें जो निम्न कार्य करता है:

    • यदि इनपुट बफ़र की लंबाई 0 है, तो पृष्ठभूमि में वर्तमान नौकरी (पिछली बार निलंबित या शुरू की गई नौकरी) डालें , और प्रॉम्प्ट को फिर से परिभाषित करें।
    • अन्यथा, इनपुट बफ़र को स्टैक पर पुश करें और एक नया प्रॉम्प्ट दिखाएं। एक बार जब उपयोगकर्ता एक कमांड में प्रवेश करता है या इसे Ctrl+ के साथ रद्द करता है C, तो धक्का दिया गया बफर आगे के संस्करण के लिए वापस लाया जाता है।
  • इस फ़ंक्शन को Ctrl+ पर बाँधें Z

यदि आप केवल यह चाहते हैं कि कमांड लाइन खाली है, तो बैकग्राउंडिंग व्यवहार:

function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_

मुझे नहीं पता कि क्या आप बैश में भी ऐसा कर सकते हैं। यह आसान के रूप में के रूप में होना चाहिए bind -x '"\C-z": bg'जगह में tty रोक चरित्र, तो यह हो जाता है कभी नहीं, सिवाय इसके कि पार्टी पत्ते Ctrl+ Zइनपुट के रूप में।


दिलचस्प है, मुझे देखने दो कि क्या यह बैश में किया जा सकता है। यदि हां, तो यह एक समाधान होगा। मैं zsh से परिचित नहीं हूँ। मन समझा रहा है कि आपकी स्क्रिप्ट क्या करती है?
trusktr

@trusktr मेरा संपादन देखें
गिलेस एसओ- बुराई को रोकना '

धन्यवाद! मैं zsh पर स्विच करने वाला हूं। मैं इसके बारे में इतना अच्छा सामान सुन रहा हूँ।
trusktr

15

आप &इसके बाद एक कार्य जोड़ सकते हैं।

उदाहरण के लिए tail -f /var/log/messages &, कार्य को तुरंत पृष्ठभूमि देगा।

हमेशा की तरह आप देख सकते हैं कि आपने jobsकमांड के साथ कौन से कार्य किए हैं ।

यह निश्चित रूप से मानता है कि आपने अभी तक कमांड नहीं चलाया है।


यह उपयोगी है, लेकिन मेरा मतलब नहीं है। यदि मेरे पास अग्रभूमि में ऐप है, तो इसे बाद में पृष्ठभूमि में भेजना चाहते हैं, मैं ctrl+zतब bgकमांड लाइन पर निष्पादित कर सकता हूं जो पृष्ठभूमि में ऐप चलाता है। लेकिन दबाने ctrl+zऔर निष्पादित करने के बीच bg, एक समय सीमा है कि ऐप पूरी तरह से रोक दिया गया है। मैं ऐसा नहीं चाहता। मैं इसे तुरंत पृष्ठभूमि पर कैसे भेजूं ?
trusktr

@trusktr जैसे गिल्स ने कहा। आपको शेल और टर्मिनल दोनों को सूचित करना होगा। क्षमा करें, मुझे ऐसा करने का कोई तरीका नहीं पता है।
prateek61

यह प्रश्न का उत्तर नहीं देता है।
लुसियानो एंड्रेस मार्टिनी

4

कमांड में एम्परसेंड जोड़कर एक कमांड को बैकग्राउंड किया जाता है।

sleep 300 &

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


Ctrl + z दबाने और बीजी को निष्पादित करने के बीच, एक समय सीमा है कि ऐप पूरी तरह से रोका गया है, जो कि मैं नहीं चाहता हूं। तो तुरंत पृष्ठभूमि में भेजने का कोई तरीका नहीं है ?
trusktr

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