जब भी आप linux या OSX पर कोई प्रोग्राम चलाते हैं, तो यह एक प्रोसेस के अंदर चलता है। और हर प्रक्रिया का एक नाम होता है। जब आप ps या top, या htop जैसी कमांड चलाते हैं तो नाम वही दिखता है।
htop सबसे दाहिने कॉलम में प्रक्रिया के नाम दिखाता है।
डिफ़ॉल्ट प्रोसेस नेम चूस सकते हैं
डिफ़ॉल्ट रूप से एक प्रक्रिया का नाम आपके द्वारा चलाए जा रहे प्रोग्राम वाले निष्पादन योग्य फ़ाइल नाम से लिया गया है। यह अधिकांश निष्पादन योग्य के लिए अच्छी तरह से काम करता है। आखिरकार, यह समझ में आता है कि जब आप "कम" चलाते हैं, तो इसकी प्रक्रिया का नाम "कम" होना चाहिए।
लेकिन डिफ़ॉल्ट प्रक्रिया नाम कम सहायक होते हैं जब आपके पास रूबी स्क्रिप्ट होती है जिसे आप कमांड लाइन से चला रहे होते हैं। नीचे दिए गए उदाहरण में, मैं एक रूबी स्क्रिप्ट चला रहा हूं जो पांच सेकंड के लिए सोती है। यदि मैं एक साथ किसी अन्य टर्मिनल विंडो में "पीएस" चलाता हूं, तो मैं देखता हूं कि मेरे स्लीपर के लिए प्रक्रिया का नाम "रूबी स्लीप_5_सेकंड.आरबी" है। अगर मैं कमांड लाइन तर्क जोड़ना चाहता था, तो वे प्रक्रिया के नाम में भी दिखाई देंगे। इससे प्रक्रिया को नाम से संदर्भित करना मुश्किल हो जाएगा।
पूर्ण रूबी कमांड प्रक्रिया नाम के रूप में सूचीबद्ध है
प्रक्रिया का नाम कैसे बदलें
सौभाग्य से आप रूबी के साथ वर्तमान प्रक्रिया का नाम आसानी से बदल सकते हैं। यहाँ हमारी अद्यतन स्क्रिप्ट है। यह अब अपने प्रक्रिया नाम को "स्लीपर" पर सेट करता है।
# `Process.setproctitle()` is in Ruby >= 2.1
# For earlier versions of Ruby, you can use
# $PROGRAM_NAME = "sleeper"
# or
# $0 = "sleeper"
Process.setproctitle("sleeper")
sleep 5
अब, जब हम प्रोग्राम चलाते हैं और इसका शीर्षक प्रदर्शित करने के लिए ps का उपयोग करते हैं, तो हमें "स्लीपर" मिलता है
रूबी में प्रोसेस टाइटल बदलने से ps
का आउटपुट बदल जाता है और top
लेकिन इससे भी बेहतर, अब हम नाम से प्रक्रिया को आसानी से संदर्भित कर सकते हैं। मान लीजिए मैं अपने स्लीपर के सोने का इंतजार करते-करते थक गया हूं। मैं killall sleeper
. कमांड का उपयोग करके इसे मार सकता हूं ।
आप killall
का उपयोग कर सकते हैं नाम से प्रक्रियाओं को समाप्त करने का आदेश
प्रक्रिया के नाम से सर्वर की स्थिति प्रदर्शित करना
प्रक्रिया शीर्षक बदलने की हमारी नई क्षमता का एक दिलचस्प उपयोग लंबी चलने वाली प्रक्रियाओं के लिए स्थिति की जानकारी प्रदर्शित करना है। यदि आपने कभी यूनिकॉर्न चलाया है, तो यह परिचित दिखना चाहिए:
\-+= 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
यह चार बाल प्रक्रियाओं के साथ यूनिकॉर्न का एक उदाहरण है। जैसे हमारे स्लीप_5_सेकंड.आरबी उदाहरण के साथ, प्रक्रिया नाम केवल प्रक्रियाओं को लॉन्च करने के लिए उपयोग किए गए कमांड दिखाते हैं।
यदि कार्यकर्ता व्यस्त है या निष्क्रिय है तो स्थिति रेखाओं को प्रदर्शित करना उपयोगी हो सकता है। कुछ इस तरह:
\-+= 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
आप वास्तव में इसे रैक मिडलवेयर के साथ बहुत आसानी से कर सकते हैं। यह कैसा दिखाई दे सकता है इसका एक उदाहरण यहां दिया गया है:
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
मुझे प्रत्येक वेब पेज अनुरोध पर प्रक्रिया शीर्षक सेट करने के प्रदर्शन प्रभावों के बारे में कोई जानकारी नहीं है। तो यह सब नमक के एक दाने के साथ लें। लेकिन फिर भी, यह एक बहुत अच्छा विचार है।
यदि आप इस विचार का अधिक उन्नत कार्यान्वयन देखना चाहते हैं - एक जिसे वास्तव में उत्पादन में उपयोग किया गया है - थॉमस वारानेकस की महान ब्लॉग पोस्ट ओवरराइडिंग यूनिकॉर्न वर्कर प्रोसेस नेम्स पर देखें।