जब भी आप लिनक्स या OSX पर कोई प्रोग्राम चलाते हैं, यह एक प्रक्रिया के अंदर चलता है। और हर प्रक्रिया का एक नाम होता है। यह नाम वही है जो आप `ps` या `top`, या `htop` जैसी कमांड चलाने पर देखते हैं।
htop दाईं ओर के कॉलम में प्रक्रिया के नाम दिखाता है।
डिफ़ॉल्ट प्रक्रिया के नाम बेकार हो सकते हैं
डिफ़ॉल्ट रूप से किसी प्रक्रिया का नाम उस निष्पादन योग्य फ़ाइल के नाम से लिया जाता है जिसमें आपका प्रोग्राम होता है। यह अधिकांश निष्पादन योग्य के लिए अच्छा काम करता है। आखिरकार, यह समझ में आता है कि जब आप "less" चलाते हैं, तो इसका प्रक्रिया नाम "less" होना चाहिए।
लेकिन डिफ़ॉल्ट प्रक्रिया के नाम तब कम उपयोगी होते हैं जब आपके पास एक Ruby स्क्रिप्ट होती है जिसे आप कमांड लाइन से चला रहे होते हैं। नीचे दिए गए उदाहरण में, मैं एक Ruby स्क्रिप्ट चला रहा हूँ जो पांच सेकंड के लिए सोती है। यदि मैं साथ ही दूसरे टर्मिनल विंडो में "ps" चलाता हूँ, तो मुझे दिखता है कि मेरे स्लीपर का प्रक्रिया नाम "ruby sleep_5_seconds.rb" है। यदि मैं कमांड लाइन आर्गुमेंट जोड़ूं, तो वे भी प्रक्रिया के नाम में दिखाई देंगे। इससे प्रक्रिया को नाम से संदर्भित करना मुश्किल हो जाएगा।
पूरा Ruby कमांड प्रक्रिया के नाम के रूप में सूचीबद्ध है
प्रक्रिया का नाम कैसे बदलें
सौभाग्य से आप Ruby में वर्तमान प्रक्रिया का नाम आसानी से बदल सकते हैं। यहाँ हमारी अपडेटेड स्क्रिप्ट है। यह अब अपने प्रक्रिया का नाम "sleeper" सेट करती है।
# `Process.setproctitle()` Ruby >= 2.1 में है # Ruby के पुराने संस्करणों के लिए, आप उपयोग कर सकते हैं # $PROGRAM_NAME = "sleeper" # या # $0 = "sleeper" Process.setproctitle("sleeper") sleep 5
अब, जब हम प्रोग्राम चलाते हैं और इसके शीर्षक को प्रदर्शित करने के लिए ps का उपयोग करते हैं, तो हमें "sleeper" मिलता है
Ruby में प्रक्रिया का शीर्षक बदलने से `ps` और `top` का आउटपुट बदल जाता है
लेकिन इससे भी बेहतर, अब हम आसानी से प्रक्रिया को नाम से संदर्भित कर सकते हैं। मान लीजिए मैं अपने स्लीपर के सोने का इंतजार करते-करते थक गया हूँ। मैं इसे `killall sleeper` कमांड का उपयोग करके मार सकता हूँ।
आप `killall` कमांड का उपयोग करके प्रक्रियाओं को नाम से समाप्त कर सकते हैं
प्रक्रिया के नाम के माध्यम से सर्वर स्थिति प्रदर्शित करना
प्रक्रिया के शीर्षक को बदलने की हमारी नई क्षमता का एक दिलचस्प उपयोग लंबे समय तक चलने वाली प्रक्रियाओं के लिए स्थिति जानकारी प्रदर्शित करना है। यदि आपने कभी Unicorn चलाया है, तो यह परिचित लगना चाहिए:
\-+= 27185 deply unicorn master -c simple_unicorn_config.rb -l0.0.0.0:8080 |--- 27210 deply unicorn worker[0] -c simple_unicorn_config.rb -l0.0.0.0:8080 |--- 27211 deply unicorn worker[1] -c simple_unicorn_config.rb -l0.0.0.0:8080 |--- 27212 deply unicorn worker[2] -c simple_unicorn_config.rb -l0.0.0.0:8080 |--- 27213 deply unicorn worker[3] -c simple_unicorn_config.rb -l0.0.0.0:8080
यह चार चाइल्ड प्रक्रियाओं के साथ Unicorn का एक उदाहरण है। हमारे sleep_5_seconds.rb उदाहरण की तरह ही, प्रक्रिया के नाम केवल प्रोसेस लॉन्च करने के लिए उपयोग की जाने वाली कमांड दिखाते हैं।
यदि स्टेटस लाइनें प्रदर्शित करें कि वर्कर व्यस्त है या निष्क्रिय, तो यह उपयोगी हो सकता है। कुछ इस तरह:
\-+= 27185 deply unicorn master -c simple_unicorn_config.rb -l0.0.0.0:8080 |--- 27210 deply unicorn worker[0] -c simple_unicorn_config.rb -l0.0.0.0:8080 BUSY |--- 27211 deply unicorn worker[1] -c simple_unicorn_config.rb -l0.0.0.0:8080 |--- 27212 deply unicorn worker[2] -c simple_unicorn_config.rb -l0.0.0.0:8080 |--- 27213 deply unicorn worker[3] -c simple_unicorn_config.rb -l0.0.0.0:8080 BUSY
आप वास्तव में इसे Rack मिडलवेयर के साथ काफी आसानी से कर सकते हैं। यहाँ एक उदाहरण है कि यह कैसा दिख सकता है:
class UpdateProcessTitle def initialize(app) @app = app end def call(env) title = $0 $0 = $0 + " BUSY" status, headers, body = @app.call(env) $0 = title [status, headers, body] end end
मुझे हर वेब पेज रिक्वेस्ट पर प्रक्रिया का शीर्षक सेट करने के प्रदर्शन निहितार्थ का कोई अंदाजा नहीं है। तो इसे एक चुटकी नमक के साथ लें। लेकिन फिर भी, यह एक बहुत अच्छा विचार है।
यदि आप इस विचार का अधिक उन्नत कार्यान्वयन देखना चाहते हैं - जो वास्तव में उत्पादन में उपयोग किया गया है - तो थॉमस वरानेकस के Unicorn वर्कर प्रक्रिया के नामों को ओवरराइड करने पर बेहतरीन ब्लॉग पोस्ट देखें।