GNU स्क्रीन में शुरू हुए एक प्रोग्राम को दूसरे टर्मिनल में ले जाएं


21

मैं screenइसके अंदर चल रही प्रक्रिया को संरक्षित करते हुए GNU के एक उदाहरण को समाप्त करना चाहता हूं ।

इसलिए मैंने अपना नियमित टर्मिनल एमुलेटर प्रोग्राम खोला और स्क्रीन निष्पादित की। तब मैंने उस घटना screenको अंजाम दिया ./script_x.sh। अब, जो भी कारण के लिए, मैं screenहालांकि script_x.shअभी तक अपना काम पूरा नहीं करना चाहता हूं और अपनी प्रगति को रोकना नहीं चाहता।

क्या मैं अपने नियमित टर्मिनल एमुलेटर के अंदर इस पर काम करना जारी रखने के लिए सक्रिय प्रक्रिया को जीवित रख सकता हूं?


14
क्या आप वास्तव में स्क्रीन को मारना चाहते हैं या आप इससे अलग होना चाहते हैं? स्क्रीन का उपयोग पृष्ठभूमि में एक प्रक्रिया को चलाने के लिए किया जाता है ताकि आप अपने सामान्य सत्र में जारी रख सकें, यह एप्स को लॉगआउट करने के बाद भी चालू रखने की अनुमति देता है (जैसे आपके SSH सत्र को डिस्कनेक्ट करें)। आप हमेशा स्क्रीन से अलग कर सकते हैं, अपने सामान्य सत्र में जारी रख सकते हैं और पिकअप कर सकते हैं जहां आपने स्क्रीन सत्र में छोड़ दिया है। आपके टर्मिनल एमुलेटर का इससे कोई लेना-देना नहीं है।
ब्लूकैक्टी

या screenसत्र के अंदर एक और स्क्रीन बनाएं ।
चिरलीस-स्ट्राइक-

11
यह प्रश्न XY समस्या की तरह बदबू आ रही है ।
डिजिटल क्रिस

7
@ tjt263 - आप कहते हैं कि आप पहली बार स्क्रीन का उपयोग करके पछतावा करते हैं, इसलिए यदि आपने स्क्रीन का उपयोग नहीं किया है तो आप अपनी प्रक्रिया को चालू रखने के लिए क्या करेंगे? आप स्क्रीन में प्रक्रिया के साथ अभी भी एक ही काम कर सकते हैं, लेकिन स्क्रीन का अतिरिक्त लाभ यह है कि आप इससे अलग हो सकते हैं और अपनी प्रक्रिया को कम नहीं होने दे सकते हैं।
जॉनी

@DigitalChris यह अब हो सकता है। मुझे लगता है कि मूल शीर्षक शायद अधिक प्रासंगिक था। 3 अलग-अलग बिंदु हैं: मैं अंदर एक कार्यक्रम चला रहा था screen। मैं उपयोग बंद करना चाहता था screen। मैं उस प्रोग्राम को रोकना नहीं चाहता था जो अंदर चल रहा था screen। बस। मुझे नहीं पता कि स्थिति को कैसे स्पष्ट किया जाए या इसे किसी भी सरल तरीके से व्यक्त किया जाए।
आवाजें

जवाबों:


31

TLDR: व्यावहारिक उत्तर: नहीं।

दीर्घ उत्तर:

सिद्धांत रूप में आप कर सकते हैं। अगर आपने nohup myprog &स्क्रीन के अंदर से कुछ शुरू किया तो यह चालू रहेगा। यह एक हैंगअप सिग्नल को नजरअंदाज कर देगा और इसमें कोई इनपुट नहीं होगा, लेकिन थ्योरी में आप इसके साथ काम करना जारी रख सकते हैं।

व्यवहार में यह ऐसा नहीं है। इस प्रकार जब तक आप डिबगर को रनिंग प्रक्रिया से जोड़ना चाहते हैं और इसकी फ़ाइल हैंडल को फिर से लिखना चाहते हैं और सुनिश्चित करें कि जब आप स्क्रीन को बंद करते हैं तो यह प्रक्रिया -1 सिग्नल को संभालती है ... तो उत्तर नहीं है।

यदि आप ऐसा करने के लिए तैयार हैं, तो मेरे पास घर पर एक बुकमार्क है, जो [SU] की ओर इशारा करता है, जहां किसी ने ऐसा किया है । Awesomeness के लिए बचाया, इसलिए नहीं कि यह करना आसान और तुच्छ है।


ध्यान दें कि आपके उत्तर के बाद से प्रश्न को बड़े पैमाने पर संपादित किया गया है।
क्राइसिस -ऑन स्ट्राइक-

एक प्रक्रिया को डिस्कनेक्ट करना काफी सरल है - यह प्रक्रिया समूहों ( disownया निचले स्तर पर) को स्थापित करने का सवाल है, ताकि SIGHUPमूल प्रक्रिया के मरने पर कोई भेजा न जाए। पुन: कनेक्ट करना i / o पूरी तरह से एक और बात है - यही वह जगह है जहाँ डिबगर आता है।
एलेक्सिस

आप की जरूरत नहीं है nohupअगर आप एक काम पर नियंत्रण खोल (जैसे में हैं bash, ksh, csh, zsh, ash, आदि)। यदि आप अभी भी बॉर्न जैसे गैर-जॉब कंट्रोल शेल का उपयोग कर रहे हैं तो shशायद यह अपग्रेड करने का समय है।
लड़कियों को

23

आप reptyrविभिन्न टर्मिनल पर पहले से चल रहे एप्लिकेशन को रीटचैच का उपयोग करके देख सकते हैं । हालांकि पृष्ठभूमि के लिए प्रक्रिया भेजने के साथ इसके कुछ मुद्दे हैं।

मैंने सिर्फ इसका परीक्षण किया ( htopअंदर शुरू करो screen, reptyrयह एक और टर्मिनल के लिए, मार डालो screen), और यह ठीक काम करने लगा। फिर भी यह वास्तव में हैकी समाधान है, इसलिए कोई गारंटी नहीं है।


1
जीडीबी का उपयोग करने की तुलना में कम हैकी :)
हेन्नेस

14

हां (यदि "हत्या" वास्तव में हत्या नहीं है), तो वास्तव में वास्तव में स्क्रीन क्या है। आपको मैनुअल की जांच करनी चाहिए और कोशिश करनी चाहिए कि इनमें से कौन आपकी आवश्यकताओं के अनुरूप है:

C-a d
C-a C-d     (detach)      Detach screen from this terminal.

C-a D D     (pow_detach)  Detach and logout.

फिर आपको अपनी पसंद के आधार पर स्क्रीन के -D / -d -R / -r कमांड लाइन विकल्प की आवश्यकता होगी।


1
इस सवाल का जवाब नहीं है। ओपी स्क्रीन से अलग नहीं होना चाहता, वे स्क्रीन प्रक्रिया को समाप्त करना चाहते हैं।
गुंतराम ब्लोहम

6
हां, उन्होंने लिखा कि लेकिन मुझे यकीन नहीं है कि उन्होंने पूछा कि वह क्या चाहते हैं।
गोम्बाई सांडोर

11
@GuntramBlohm यह बिल्कुल स्पष्ट नहीं है कि ओपी समझता है कि स्क्रीन कैसे काम करती है, और यह सबसे अधिक वांछित प्रभाव है।
चिरलीस-स्ट्राइक-

2
क्या आप जानते हैं कि स्क्रीन xterm से अलग कोई टर्मिनल नहीं है, लेकिन एक परत (एक छद्म टर्मिनल) है जो आपके वास्तविक टर्मिनल (vterm, xterm, टर्मिनेटर, (m) rxvt, किसी भी) को किसी अन्य टर्मिनल से अलग करने के बाद संलग्न किया जा सकता है? और स्क्रीन वह है जो आपकी प्रक्रिया को चालू रखता है जिसे आपने इसे स्क्रीन के अंदर शुरू किया था (और यह इसे अच्छी तरह से करता है)। यदि आप (वास्तव में मारते हैं) स्क्रीन को मारते हैं, तो आप अपनी प्रक्रिया के तहत गलीचा बाहर निकालते हैं ... मुझे ऐसा कोई अच्छा कारण नहीं दिखता कि आप ऐसा क्यों करेंगे।
गोम्बाई सांडोर

1
@ GombaiSándor: एक कारण यह करने के लिए चाहते करने के लिए है कि इस प्रक्रिया में बात करने के लिए किया जाएगा सीधे आदेश क्षमताओं के माध्यम से पारित करने के लिए है कि स्क्रीन के बारे में पता नहीं है में एक टर्मिनल के लिए। उदाहरण के लिए, मैंने एक बार अपने कीबोर्ड पर सभी अजीब फ़ंक्शन कुंजियों को बनाने के लिए अपने एक्सटरम के अपने संस्करण को हैक कर लिया था, जिसमें से बचने के लिए X11 कीज़ाइम और पूर्ण संशोधक राज्य शामिल थे, इसे दिखाने का प्रयास करने के बजाय एक वीटी 102 था - और फिर स्थापित करना शुरू किया emacs में उनके लिए कीबाइंडिंग। उन सीक्वेंस को अनहेल्दी स्क्रीन से नहीं गुजारा जाएगा।
हेन्निंग मैखोलम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.