2010-10-19 7 views
5

संभव डुप्लिकेट:
Redirect STDERR/STDOUT of a process AFTER it’s been started, using command line?बैश: पहले से चल रही प्रक्रिया से आउटपुट रीडायरेक्ट कर रहा है?

वहाँ एक रास्ता है, बैश में, कब्जा करने के लिए/आउटपुट पुनर्निर्देशित (और stderr?) एक प्रक्रिया का एक बार यह पहले से ही चल रहा है?

उत्तर

7

जीडीबी का उपयोग करना संभव है। प्रश्न का उत्तर पहले से ही this thread में दिया गया है।

+0

लक्ष्य प्रक्रिया में चलाने के लिए कोड को बल देने के लिए डीबगर का उपयोग करना शायद ही कभी 'बैश' प्रक्रिया है। – bmargulies

+1

@bmargulies: '(printf 'p dup2 (खुला ("/dev/null ", 1), 1) \ np dup2 (1,2) \ nndetach \ n'; नींद 1) | gdb -p $ my_pid' passes एक शेलस्क्रिप्ट के रूप में अच्छी तरह से पर्याप्त है। अनुमोदित, 'gdb' पॉज़िक्स नहीं है, लेकिन फिर, न तो बहुत सारे बाश-इस्म्स हैं :) – Jander

4

कम से कम, वास्तव में विश्वसनीय नहीं है।

जब कोई प्रक्रिया फोर्क की जाती है, तो इसमें फोर्क() से पहले अपने माता-पिता द्वारा व्यवस्थित पहले तीन फ़ाइल डिस्क्रिप्टर होते हैं, इसलिए उन्हें विरासत मिलती है।

फोर्क के बाद, कर्नेल कोड के बिना, ऐसा कुछ भी नहीं है कि उस प्रक्रिया के अलावा कोई भी प्रक्रिया उनके साथ कर सकती है।

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

+0

खांसी * जीडीबी * ... खांसी * स्ट्रेस *। खांसी * एक प्रक्रिया के STDERR/STDOUT को पुनर्निर्देशित करें, इसे कमांड लाइन का उपयोग करके शुरू किया गया है? * Http://stackoverflow.com/questions/593724 :) – SyntaxT3rr0r

+0

@ वेब खांसी कर्नेल, लेकिन मैं आपका बिंदु देखता हूं। – bmargulies

+2

+1 यह इंगित करने के लिए कि यह जीडीबी हैकरी सही तरीके से काम करने की गारंटी नहीं है। – Jander