क्या यूनिक्स / लिनक्स में इंटरप्रोसेस संचार को बाधित करने का एक तरीका है?


15

नेटवर्क ट्रैफ़िक को इंटरसेप्ट करने / विश्लेषण करने के लिए, हमारे पास एक उपयोगिता है, जिसे विरेशर कहा जाता है ।

क्या यूनिक्स / लिनक्स में किसी भी दो प्रक्रियाओं के बीच सभी इंटरप्रोसेस संचार को बाधित करने के लिए हमारी समान उपयोगिता है?

मैंने मेमोरी में कुछ प्रक्रियाएं बनाई हैं और मुझे यह प्रोफाइल करने की आवश्यकता है कि वे एक-दूसरे के साथ कैसे संवाद करते हैं।


1
संचार के लिए आप किस IPC तंत्र का उपयोग कर रहे हैं?
axel_c

@axel_c: प्रक्रिया स्रोत मेरे साथ नहीं है, लेकिन मुझे लगता है कि मैंने प्रलेखन में कहीं न कहीं "साझा मेमोरी" पढ़ी है।
लेज़र

जवाबों:


19

यह संचार तंत्र पर बहुत कुछ निर्भर करता है।

  • स्पेक्ट्रम के सबसे पारदर्शी अंत में, प्रक्रिया इंटरनेट सॉकेट (यानी आईपी ) का उपयोग करके संवाद कर सकती है । फिर वायरशर्क या tcpdump लूपबैक इंटरफेस पर इंगित करके सभी ट्रैफ़िक दिखा सकते हैं।

  • एक मध्यवर्ती स्तर पर, पर यातायात पाइप और यूनिक्स सॉकेट के साथ मनाया जा सकता है truss/ strace/ trace/ ..., स्विस सेना प्रणाली ट्रेसिंग की चेनसॉ। यह प्रक्रियाओं को काफी धीमा कर सकता है, हालांकि, इसलिए यह प्रोफाइलिंग के लिए उपयुक्त नहीं हो सकता है।

  • स्पेक्ट्रम के सबसे अपारदर्शी अंत में, साझा की गई स्मृति है। साझा मेमोरी का मूल ऑपरेटिंग सिद्धांत यह है कि एक्सेस प्रत्येक शामिल प्रक्रिया में पूरी तरह से पारदर्शी है, आपको केवल साझा मेमोरी क्षेत्रों को सेट करने के लिए सिस्टम कॉल की आवश्यकता है। इन मेमोरी एक्सेस को बाहर से ट्रेस करना कठिन होगा, खासकर यदि आपको समय की गड़बड़ी न करने के लिए अवलोकन की आवश्यकता हो। आप लिनक्स ट्रेस टूलकिट (कर्नेल पैच की आवश्यकता होती है) जैसे टूल आज़मा सकते हैं और देखें कि क्या आप उपयोगी जानकारी निकाल सकते हैं; यह उस तरह का क्षेत्र है जहां मैं सोलारिस से बेहतर उपकरण की उम्मीद करूंगा (लेकिन मुझे इसका कोई ज्ञान नहीं है)।

    यदि आपके पास स्रोत है, तो आपका सबसे अच्छा विकल्प अच्छी तरह से प्रमुख पुस्तकालय कार्यों में अनुरेखण बयान जोड़ना हो सकता है। LD_PRELOADयदि आपके पास (संपूर्ण) स्रोत नहीं है, तो भी ट्रिक्स के साथ यह संभव हो सकता है , जब तक कि प्रोग्राम के उस हिस्से के नियंत्रण प्रवाह की पर्याप्त समझ हो जो साझा की गई मेमोरी तक पहुंचता है।


6

यह दिखाएगा कि एक प्रक्रिया क्या पढ़ती है और क्या लिखती है:

strace -ewrite -p $PID

यह साफ आउटपुट नहीं है (जैसे लाइनें दिखाता है: लिखना (#,)), लेकिन काम करता है! (और एकल-पंक्ति है: D) आप इस तथ्य को भी नापसंद कर सकते हैं, कि तर्क संक्षिप्त हैं। उस उपयोग-एस पैरामीटर को नियंत्रित करने के लिए जो प्रदर्शित स्ट्रिंग की अधिकतम गति निर्धारित करता है।

यह सभी धाराओं को पकड़ता है, इसलिए आप किसी भी तरह फ़िल्टर करना चाह सकते हैं।

आप इसे फ़िल्टर कर सकते हैं:

strace -ewrite -p $PID 2>&1 | grep "write(1"

केवल वर्णनकर्ता 1 कॉल दिखाता है। 2> और 1 को stdout में stderr को पुनर्निर्देशित करना है, क्योंकि stearr डिफ़ॉल्ट रूप से stream लिखता है।

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