लिनक्स कंसोल में स्ट्रेस कमांड के साथ सिस्टम कॉल की निगरानी कैसे करें
<पी> अब जब आप जानते हैं कि सिस्टम कॉल फ़ंक्शंस क्या हैं, तो आइए आपको दिखाते हैं कि "स्ट्रेस" कमांड का उपयोग करके लिनक्स कमांड कंसोल से वास्तविक समय में उनकी निगरानी कैसे करें। "स्ट्रेस" कमांड बहुत लचीला है। इसका उपयोग सिस्टम की निगरानी करने के लिए किया जाता है और यह कई विकल्प प्रदान करता है जिन्हें आप निम्न कमांड के साथ देख सकते हैं: <पी> जब आप यह कमांड चलाते हैं, तो "स्ट्रेस" द्वारा पेश किए गए मॉनिटरिंग विकल्पों की सूची कमांड कंसोल में प्रदर्शित होती है। <पी>
<पी> किसी प्रक्रिया के syscalls की निगरानी करने के लिए, हमें इसे निम्नलिखित कमांड के साथ चलाने की आवश्यकता है: <पी> स्ट्रैक स्ट्रेस ./प्रक्रिया
ई -ह <पी> इसका परीक्षण करने के लिए, हम निम्नलिखित कोड को संकलित करते हैं जिसे हमने "सी भाषा में कनेक्ट फ़ंक्शन" शीर्षक वाले अपने लेख में एक उदाहरण के रूप में दिया था। यह कोड, हालांकि बहुत सरल है, बहुत दिलचस्प है क्योंकि यह हमें HTTP सेवा के माध्यम से Google होस्ट से जोड़ता है और हमें कमांड भेजने और प्रतिक्रिया प्राप्त करने की अनुमति देता है। <पी> #शामिल
#शामिल
#शामिल करें
#शामिल
#शामिल
#शामिल
#शामिल
#शामिल
int सॉकेट_आईडी;
इंट पोर्ट =80;
पूर्णांक त्रुटि;
चार बफ़र [1025]; <पी> स्ट्रक्चर होस्टेंट *सर्वर;
struct sockaddr_in क्लाइंट;
मेमसेट(&सर्वर, 0, साइजऑफ(सर्वर));पी> <पी> // चरण 2
सर्वर =gethostbyname ("www.google.com");
यदि (सर्वर ==शून्य)
{
प्रिंटफ ("\nडोमेन डेटा प्राप्त करने में त्रुटि।\n");
वापसी 1;
} <पी> // चरण 3
सॉकेट_आईडी =सॉकेट (AF_INET, SOCK_STREAM, 0); <पी> //चरण 4
client.sin_family =AF_INET;
client.sin_port =htons(पोर्ट); <पी> // चरण 5
bcopy((char *) सर्वर->h_addr,
(चार *) &client.sin_addr.s_addr,
sizeof(server->h_length)); <पी> त्रुटि=कनेक्ट(सॉकेट_आईडी, (स्ट्रक्चर सॉकएड्र *) और क्लाइंट, साइजऑफ(क्लाइंट));पी> <पी> यदि (त्रुटि <0){
प्रिंटफ ("\nसर्वर से कनेक्शन स्थापित नहीं किया जा सका\n");
बंद करें(सॉकेट_आईडी);
वापसी 1;
} <पी> प्रिंटफ़ ("\nकनेक्ट करें:%s\n", inet_ntoa( client.sin_addr ));
जबकि (1){ <पी> प्रिंटफ ("बाहर निकलने के लिए Ctrl+c दबाएं \nhttp कमांड भेजें:");
fgets(बफर, 1025, stdin);
भेजें(सॉकेट_आईडी, बफ़र, 1025, 0);
मेमसेट(&बफ़र, '\0', 1025);
recv(सॉकेट_आईडी, बफ़र, 1025, 0);
प्रिंटफ़ ("%s", बफ़र);
मेमसेट(&बफ़र, '\0', 1025); <पी> } <पी> } <पी> हम कोड संकलित करते हैं और इसे "कनेक्ट" आउटपुट नाम देते हैं। फिर, हम इसे "./कनेक्ट" कमांड के साथ निष्पादित करते हैं और सिस्कॉल की निगरानी करने में सक्षम होने के लिए "स्ट्रेस" कमांड को जोड़ते हैं। <पी> यह कमांड कमांड कंसोल में प्रक्रियाओं के syscalls को प्रदर्शित करता है। जैसा कि निम्नलिखित चित्र में देखा गया है, हालाँकि हमारे कोड में केवल सॉकेट(), कनेक्ट(), सेंड() और recv() syscalls का उपयोग किया गया है, इसके निष्पादन के लिए हमारे द्वारा उपयोग किए जाने वाले फ़ंक्शन के कोड में होने वाली अन्य सिस्टम कॉल की आवश्यकता होती है। <पी>
<पी> निम्न आदेश किसी प्रक्रिया के समाप्त होने पर उसके लिए सिस्टम कॉल का सारांश प्रदर्शित करता है: <पी>
<पी> प्रक्रिया प्रबंधन के लिए सिस्टम कॉल फ़ंक्शन: