मैं एक प्रक्रिया को पृष्ठभूमि में कैसे स्थानांतरित कर सकता हूं और इसके आउटपुट को भी चुप कर सकता हूं?


11

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

क्या इस प्रक्रिया को रोकने के बिना ऐसा करने का एक तरीका है और इसे फिर से उपयोग करना शुरू कर सकता है &और > /dev/null 2>&1? मुझे आश्चर्य हो रहा है कि कुछ कमांड है जो प्रदर्शन करता है bg और लक्ष्य प्रक्रिया के आउटपुट डिस्क्रिप्टर को भी बदल सकता है।

जवाबों:


9

बहुत देर। एक प्रक्रिया शुरू होने के बाद , शेल का प्रक्रिया फ़ाइल विवरणकों पर अधिक नियंत्रण नहीं होता है, इसलिए आप इसे शेल कमांड द्वारा चुप नहीं कर सकते ।

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


क्या आप प्रक्रिया को पृष्ठभूमि में रखने के लिए CTRL + Z नहीं कर सकते हैं? यह प्रक्रिया को शांत नहीं करता है, और यदि आप लॉग आउट करते हैं, तो मुझे लगता है कि यह प्रक्रिया को भी मारता है।
रॉय रिको

1
@RoyRico, एक प्रक्रिया को मार रहा है SIGSTOP(या जैसा कि आप कहते हैं CTRL + Z ) एक प्रक्रिया को चुप नहीं करता है। यह एक प्रक्रिया को रोकता है!
andcoz

5

एक टर्मिनल से चलने वाली प्रक्रिया में टर्मिनल के लिए बाध्य होने वाला स्टड, स्टडआउट और स्टेडर होता है और आप उस टर्मिनल पर फिर से नियंत्रण प्राप्त किए बिना इसके बारे में कुछ भी नहीं कर सकते हैं ... आम तौर पर। लेकिन कुछ मुश्किल उपकरण हैं जो वास्तव में आपको ऐसा करने देते हैं। पर एक नजर डालें इस उदाहरण । और अन्य कार्यक्रमों की तरह rettyवहाँ उल्लेख किया।


3

मैं andcoz से असहमत हूं कि आउटपुट को चुप कराने में बहुत देर हो चुकी है।

यह मानते हुए कि प्रक्रिया अग्रभूमि में चल रही है, Ctrl-Zप्रक्रिया को निलंबित करने के लिए उपयोग करें। ऐसा करने पर जॉब नंबर और प्रोसेस आईडी की रिपोर्ट आएगी। आप आगे जा सकते हैं और प्रक्रिया को पृष्ठभूमि में ले जा सकते हैं bg %1(नौकरी # 1 के लिए)। यद्यपि यह प्रक्रिया को पृष्ठभूमि में ले जाता है, लेकिन यह आउटपुट को मौन नहीं करता है। आउटपुट को मौन करने के लिए आप gdbसभी आउटपुट को पुनर्निर्देशित कर सकते हैं /dev/null

इसे पहले /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-use-command-lin/593764#593764 पर बहुत अच्छी तरह से वर्णित किया गया है ।


0

फिर भी एक और कमांड लाइन उपकरण है detach। नवीनतम संस्करण स्टड, स्टडआउट और स्टेडर के लिए फ़ाइलों का उपयोग करके और अग्रभूमि में चलने के लिए, पिडफाइल्स लिखने का समर्थन करता है। (वेबसाइट detachभी इसी तरह के टूल पर चर्चा करती है।)

http://inglorion.net/software/detach/

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