2014-10-07 6 views
5

में नई प्रक्रियाओं के लिए सुनना, जब कोई नई प्रक्रिया निष्पादित की जाती है, जब कोई बंद हो जाता है, और जब राज्य में परिवर्तन होता है (यानी बंद हो जाता है, पेजेड, आदि) अधिसूचित होना (कॉलबैक या इसी तरह के माध्यम से) प्राप्त करना संभव है? उपयोगकर्ता-भूमि में,/proc पर एक निर्देशिका श्रोता स्थापित करना आसान होगा।लिनक्स कर्नेल मॉड्यूल

+0

"। उपयोगकर्ता के देश में, यह/proc पर एक निर्देशिका श्रोता स्थापित करने के लिए आसान होगा" असल में, नहीं, यह काम नहीं करता है। लेकिन [/ proc कनेक्टर करता है] (http://stackoverflow.com/questions/6075013/linux-detect-launching-of-programs)। – duskwuff

उत्तर

2

क्या आपने kprobes को माना है? कुछ कर्नेल कोड निष्पादित होने पर आप कॉलबैक फ़ंक्शन निष्पादित करने के लिए kprobes का उपयोग कर सकते हैं। उदा।, this example में नई प्रक्रियाएं बनाई जाने पर आप चेतावनी के लिए do_fork kprobe जोड़ सकते हैं।

इसी प्रकार, प्रक्रियाओं से बाहर निकलने पर पकड़ने के लिए आप do_exit() के लिए एक जांच जोड़ सकते हैं।

राज्य बदलने के लिए, आपके पास sched_switch() पर वापसी की जांच हो सकती है और जब राज्य बदलता है तो उसे पकड़ लें। आपके आवेदन के आधार पर, यह बहुत अधिक ओवरहेड जोड़ सकता है। https://sourceware.org/systemtap/documentation.html

अधिक विवरण:

आप केवल, डेटा एकत्र कुछ प्रकाश प्रसंस्करण प्रदर्शन करना चाहते और कर्नेल मॉड्यूल के साथ भी बहुत कुछ करने के लिए नहीं देख रहे हैं, तो systemtap एक कर्नेल मॉड्यूल लिखने के लिए एक अच्छा विकल्प हो सकता है kprobes पर: https://www.kernel.org/doc/Documentation/kprobes.txt

sched_switch() systemtap उदाहरण: https://sourceware.org/systemtap/examples/profiling/sched_switch.stp

संबंधित मुद्दे