লিনাক্স বা macOS-এ যেকোনো প্রোগ্রাম রান করলে, সেটি একটি প্রসেসের ভিতরে রান হয়। এবং প্রতিটি প্রসেসের একটি নাম থাকে। এই নামটি আপনি দেখেন যখন `ps` বা `top`, অথবা `htop` কমান্ড চালান।
htop-এ প্রসেসের নামগুলো ডান পাশের কলামে দেখানো হয়।
ডিফল্ট প্রসেস নাম কখনও কখনও সহায়ক নয়
ডিফল্টভাবে একটি প্রসেসের নাম তৈরি হয় সেই এক্সিকিউটেবল ফাইলের নাম থেকে যেটিতে আপনার প্রোগ্রাম থাকে। অধিকাংশ এক্সিকিউটেবলের জন্য এটি ভালো কাজ করে। বাদে, যখন আপনি "less" চালান, এর প্রসেসের নাম "less" হওয়া স্বাভাবিক।
কিন্তু ডিফল্ট প্রসেস নামগুলো কম সহায়ক হয় যখন আপনার একটি রুবি স্ক্রিপ্ট থাকে जिसे আপনি কমান্ড লাইন থেকে চালাচ্ছেন। নিচের উদাহরণে, আমি একটি রুবি স্ক্রিপ্ট চালাচ্ছি যা ৫ সেকেন্ড স্লিপ করে। যদি আমি একই সাথে অন্য একটি টার্মিনাল উইন্ডোতে "ps" চালাই, তবে আমি দেখি যে আমার স্লিপারের প্রসেসের নাম "ruby sleep_5_seconds.rb"। যদি আমি কমান্ড লাইন আর্গুমেন্ট যোগ করি, সেগুলোও প্রসেসের namn দেখাবে। এটি প্রসেসকে নাম দিয়ে রেফার করা কঠিন করে দেয়।
পুরো রুবি কমান্ড প্রসেসের নাম হিসেবে লিস্ট করা হয়েছে
প্রসেসের নাম কিভাবে পরিবর্তন করবেন
সৌভাগ্যক্রমে, রুবিতে বর্তমান প্রসেসের নাম সহজে পরিবর্তন করা যায়। এখানে আপডেট করা স্ক্রিপ্টটি। এখন এটি প্রসেসের নাম "sleeper" সেট করে।
# `Process.setproctitle()` রুবি >= 2.1-এ উপলব্ধ # পুরানো রুবি ভার্সনের জন্য, আপনি ব্যবহার করতে পারেন # $PROGRAM_NAME = "sleeper" # অথবা # $0 = "sleeper" Process.setproctitle("sleeper") sleep 5 এখন, যখন আমরা প্রোগ্রামটি চালাই এবং `ps` ব্যবহার করে এর টাইটেল দেখি, তবে আমরা পাই "sleeper"।
রুবিতে প্রসেস টাইটেল পরিবর্তন করলে `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 প্রতিটি ওয়েব পেজ রিকোয়েস্টে প্রসেস টাইটেল সেট করার পারফরম্যান্স ইমপ্লিকেশন কী হবে সেটি আমি জানি না। তাই এই বিষয়ে সতর্ক থাকুন। কিন্তু এটি একটি খুব কুল আইডিয়া।
আপনি যদি এই আইডিয়ার একটি আরও উন্নত ইমপ্লিমেন্টেশন দেখতে চান - যেটি আসলে প্রোডাকশনে ব্যবহার করা হয়েছে - তবে Thomas Varaneckas-এর Unicorn Worker প্রসেস নাম ওভাররাইড করার বিষয়ে ব্লগ পোস্টটি দেখুন।