2013-01-06 11 views
10

में पहले से चल रही प्रक्रियाओं का आउटपुट देखें मेरे पास पृष्ठभूमि (sh स्क्रिप्ट) में चल रही एक प्रक्रिया है और मुझे आश्चर्य है कि इस प्रक्रिया के आउटपुट को बिना किसी बाधा के देखना संभव है।लिनक्स

प्रक्रिया कुछ एप्लिकेशन द्वारा चलाई गई अन्यथा मैं इसे बाद में देखने के लिए स्क्रीन से जोड़ता। इसे खत्म करने में एक घंटा लग सकता है और मैं यह सुनिश्चित करना चाहता हूं कि यह सामान्य रूप से कोई त्रुटि न हो।

+2

यह उत्पादन किस प्रकार है:

तुम भी फ़ाइल वर्णनकर्ता gdb का उपयोग कर में हेरफेर कर सकते हैं? क्या यह सादा पाठ है? यदि ऐसा है तो आप "tail -f " का उपयोग कर सकते हैं। पूंछ फ़ाइल का अंत हो जाता है, -एफ ध्वज फ़ाइल को "अनुवर्ती" करने के लिए कहता है। पूंछ कमांड के लिए अन्य विकल्प हैं यह निर्दिष्ट करने के लिए कि कितनी लाइनें और मुझे लगता है कि फ़ाइल को मतदान करने के बीच कितना इंतजार करना है। – Mike

+0

समस्या यह है कि, मैंने इस प्रक्रिया को शुरू नहीं किया है जिसे प्रदाता ने लॉन्च किया है (सीपीएनल इंस्टॉलर) और कुछ भी आउटपुट को किसी भी फाइल पर रीडायरेक्ट नहीं किया है अन्यथा मैंने आपके द्वारा सुझाई गई पूंछ का उपयोग किया होगा, जो कि दिमाग में है आउटपुट देखने का कोई तरीका है? –

उत्तर

4

वहां पहले से ही है एक कार्यक्रम लिनक्स में ptrace (2) का उपयोग करता है यह करने के लिए, Retty:

http://pasky.or.cz/dev/retty/

यह काम करता है अगर आपके चल रहे प्रोग्राम पहले से ही एक tty से जुड़ा हुआ है, मुझे नहीं पता अगर आप पृष्ठभूमि में अपना प्रोग्राम चलाते हैं तो यह पता चलेगा कि यह काम करेगा या नहीं।

कम से कम यह कुछ अच्छे संकेत दे सकता है। :)

आप शायद ptrace(2) का उपयोग कर प्रोग्राम से बाहर निकलने के कोड को पुनः प्राप्त कर सकते हैं, अन्यथा gdb -p <pid> का उपयोग कर प्रक्रिया से जुड़ा हुआ है, और प्रोग्राम मरने पर इसे मुद्रित किया जाएगा।

(gdb) p close(1) 
$1 = 0 
(gdb) p creat("/tmp/stdout", 0600) 
$2 = 1 

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/

1

आप /proc/[pid]/fd/[012] ट्रिपल में हुक करने की कोशिश कर सकते हैं, लेकिन संभवतः यह काम नहीं करेगा।

अगला विचार जो मेरे दिमाग में आता है strace -p [pid] है, लेकिन आपको "प्रिटिफाइड" आउटपुट मिलेगा। write(2) में हुक करने और कहीं भी डेटा लिखने के लिए ptrace(2) का उपयोग करके एक छोटा प्रोग्राम लिखकर संभावित समाधान स्वयं को छेड़छाड़ करना है। यह काम करेगा लेकिन कुछ ही सेकंड में नहीं किया जाता है, खासकर यदि आप सी प्रोग्रामिंग के लिए उपयोग नहीं करते हैं।

दुर्भाग्यवश मैं ऐसे प्रोग्राम के बारे में नहीं सोच सकता जो ठीक से आप चाहते हैं, यही कारण है कि मैं आपको इसे लिखने का संकेत देता हूं। सौभाग्य!