जवाबों:
एक अनाम पाइप प्रकृति द्वारा उन अनुप्रयोगों के लिए निजी है जिनके पास फाइल डिस्क्रिप्टर है। पाइप पर यातायात को देखने या संशोधित करने के लिए कोई राजसी तरीका नहीं है। मुझे नहीं लगता कि लिनक्स पर सीधे पाइप को देखने का कोई तरीका है, या तो।
हालांकि, आप इसके बाद क्या कर रहे हैं, कम या ज्यादा करने का एक अप्रत्याशित तरीका है: ptrace सिस्टम कॉल के माध्यम से । आप पाइप पर प्रति सेगमेंट से नहीं निपटेंगे, लेकिन प्रक्रियाओं में से एक पर। अवलोकन के लिए, स्ट्रेस का उपयोग करें , उदा
strace -p1234 -s99999 -e write
जहां 1234
एक प्रक्रिया की प्रक्रिया आईडी है जो पाइप पर लिखती है। डेटा को संशोधित करना कठिन है, लेकिन किया जा सकता है। मुझे लगता है कि सबसे आसान तरीका यह होगा कि पहले एक इंटरमीडिएट प्रक्रिया की स्थापना की जाए जो इसके मानक इनपुट को इसके मानक आउटपुट की प्रतिलिपि बनाती है, साथ ही आप जिस डेटा को इंजेक्ट करना चाहते हैं (और जिस भी डेटा को आप दबाना चाहते हैं उसे घटाएं)। दो नामित पाइप बनाएं और एक पाइप पर स्टड और दूसरे पर स्टडआउट के साथ उस मध्यवर्ती प्रक्रिया को शुरू करें। फिर उपयुक्त नाम पाइप पर दोनों लक्ष्य प्रक्रियाओं को निष्पादित करने के लिए डिबगर (जैसे GDB ) का उपयोग करें open
, फिर dup
पाइप को उपयुक्त फ़ाइल डिस्क्रिप्टर पर रखें। ध्यान दें कि एक मौका है कि आप इस प्रक्रिया में किसी एक प्रक्रिया को क्रैश कर देंगे।
(यदि आप अंतिम पैराग्राफ को नहीं समझते हैं, तो मुझे क्षमा करें, लेकिन इसके लिए एक निश्चित स्तर की तकनीकी की आवश्यकता है। मुझे नहीं लगता कि एक आसान तरीका है।)
पाइप की निगरानी के लिए उपयोगी कुछ उपकरण:
पहले से चल रहे प्रोग्राम के लिए जहां कोई पाइपिंग को नियंत्रित नहीं करता है, जीडीबी विधि देखें:
रनिंग प्रोसेस से आउटपुट को रीडायरेक्ट करना ।
या कोई स्ट्रेस का उपयोग कर सकता है :
strace -ewrite -p $PID 2>&1 | grep "write(1"
केवल वर्णनकर्ता 1 कॉल दिखाता है। "2> और 1" stdout में stderr को पुनर्निर्देशित करना है, क्योंकि stearr डिफ़ॉल्ट रूप से stream लिखता है।