Rexx-এ subprocess ম্যানেজমেন্ট হল অন্য প্রোগ্রাম বা কমান্ডগুলিকে Rexx স্ক্রিপ্ট থেকে এক্সিকিউট করা এবং সেগুলোর আউটপুট বা ফলাফল নিয়ে কাজ করা। এটি আপনাকে অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার সুযোগ দেয়, যেমন কোন বাইরের কমান্ড রান করানো, আউটপুট ক্যাপচার করা, এবং অন্যান্য প্রোগ্রাম বা প্রসেসের সাথে কাজ করা।
এখানে কিছু সাধারণ subprocess ম্যানেজমেন্ট টেকনিক আলোচনা করা হলো:
১. Address কমান্ড দিয়ে বাইরের কমান্ড রান করানো
Rexx-এ বাইরের কমান্ড বা প্রোগ্রাম চালানোর জন্য Address কমান্ড ব্যবহৃত হয়। এটি ব্যবহারের মাধ্যমে আপনি সরাসরি অপারেটিং সিস্টেমে কমান্ড চালাতে পারেন।
সিনট্যাক্স:
Address System "command"Systemকিওয়ার্ড দিয়ে আপনি যে কোন শেল কমান্ড (যেমন CMD বা bash) রান করাতে পারেন।
উদাহরণ:
/* বাইরের কমান্ড রান করানো এবং ফলাফল প্রদর্শন */
Address System "echo Hello, World!"এটি echo কমান্ড চালাবে এবং "Hello, World!" আউটপুট হিসেবে দেখাবে।
২. বাইরের কমান্ডের আউটপুট ক্যাপচার করা
আপনি subprocess থেকে আউটপুটও ক্যাপচার করতে পারেন এবং সেই আউটপুটকে Rexx ভেরিয়েবলে সংরক্ষণ করতে পারেন। এই কাজের জন্য Address কমান্ডের সাথে queue ব্যবহার করা হয়।
সিনট্যাক্স:
Address System "command"
parse pull resultparse pullকমান্ডের মাধ্যমে subprocess এর আউটপুট একটি Rexx ভেরিয়েবলে (যেমনresult) নেওয়া হয়।
উদাহরণ:
/* 'date' কমান্ডের আউটপুট ক্যাপচার করা */
Address System "date"
parse pull result
say "Current date and time: " resultএখানে, date কমান্ডের আউটপুট result ভেরিয়েবলে সংরক্ষিত হচ্ছে এবং পরে তা প্রদর্শন করা হচ্ছে।
৩. বাইরের প্রোগ্রাম বা স্ক্রিপ্ট কল করা
Rexx দিয়ে অন্য Rexx স্ক্রিপ্ট বা বাইরের প্রোগ্রামও কল করা যায়। এটি মূলত সিস্টেমের সাথে আরো উন্নত ইন্টারঅ্যাকশন করার জন্য ব্যবহৃত হয়।
উদাহরণ:
/* অন্য Rexx স্ক্রিপ্ট কল করা */
Call ExternalScript
ExternalScript:
say "This is the subprocess running"এখানে, ExternalScript নামক অংশটি কল করা হচ্ছে এবং সেটি "This is the subprocess running" প্রিন্ট করবে।
৪. subprocess এর জন্য অপেক্ষা করা
Rexx-এ subprocess কমপ্লিট হওয়ার জন্য অপেক্ষা করতে হবে, এই প্রক্রিয়াটি সাধারণত রিটার্ন কোড বা প্রোসেস কন্ট্রোলের মাধ্যমে করা হয়। Rexx-এ কোনো built-in wait কমান্ড নেই, তবে আপনি subprocess এর সম্পন্ন হওয়ার পরে পরবর্তী কাজ শুরু করার জন্য return code চেক করতে পারেন।
উদাহরণ:
/* কমান্ড রান করানো এবং তার সম্পন্ন হওয়ার জন্য অপেক্ষা করা */
Address System "sleep 5" /* ৫ সেকেন্ডের জন্য থামবে */
say "Process complete"এখানে, sleep কমান্ডটি ৫ সেকেন্ডের জন্য থামবে এবং পরে "Process complete" মেসেজটি দেখাবে।
৫. ইনপুট/আউটপুট রিডিরেক্ট করা
Rexx subprocess এর ইনপুট বা আউটপুট রিডিরেক্ট করতে পারে। আপনি subprocess এ ডেটা পাঠাতে পারেন বা subprocess এর আউটপুট কোন ফাইলে বা অন্য জায়গায় পাঠাতে পারেন।
উদাহরণ (ইনপুট রিডিরেকশন):
/* ইনপুট রিডিরেক্ট করা */
Address System "echo 'input text' | grep 'text'"এখানে, echo কমান্ডের আউটপুট grep কমান্ডে পাস করা হচ্ছে।
উদাহরণ (আউটপুট রিডিরেকশন):
/* আউটপুট একটি ফাইলে রিডিরেক্ট করা */
Address System "echo 'Hello, World!' > output.txt"এটি echo কমান্ডের আউটপুটকে output.txt ফাইলে রিডিরেক্ট করবে।
৬. subprocess এর এরর হ্যান্ডলিং
যখন subprocess চলতে থাকে, তখন তার রিটার্ন কোড চেক করে আপনি বুঝতে পারবেন যে subprocess সফল হয়েছে কিনা বা কোন সমস্যা হয়েছে কিনা। Rexx-এ rc ভেরিয়েবল subprocess এর রিটার্ন কোড ধারণ করে।
উদাহরণ:
/* subprocess রান করানো এবং এরর চেক করা */
Address System "nonexistent_command"
if rc then
say "Error: Command failed with return code " rc
else
say "Command executed successfully"এখানে, rc ভেরিয়েবল চেক করা হচ্ছে যদি subprocess কমপ্লিট হতে না পারে, তাহলে এরর মেসেজ দেখাবে।
৭. Background Process চালানো (spawn)
যদি আপনি subprocess কে ব্যাকগ্রাউন্ডে চালাতে চান যাতে Rexx স্ক্রিপ্ট চলতে থাকে, তাহলে spawn ব্যবহার করতে পারেন।
উদাহরণ:
/* subprocess ব্যাকগ্রাউন্ডে চালানো */
Address System "nohup sleep 10 &"
say "Background process started"এটি sleep 10 কমান্ডটিকে ব্যাকগ্রাউন্ডে চালাবে এবং Rexx স্ক্রিপ্ট অবিলম্বে পরবর্তী পদক্ষেপে চলে যাবে।
৮. subprocess এর স্ট্যাটাস চেক করা
যদি আপনি একটি দীর্ঘ-running subprocess এর স্ট্যাটাস চেক করতে চান, তাহলে আপনি তার প্রসেস আইডি (PID) বা অন্য কোনও পদ্ধতি ব্যবহার করে এটি চেক করতে পারেন।
উদাহরণ:
/* প্রসেসের স্ট্যাটাস চেক করা */
Address System "ps -e | grep myprocess"
parse pull processStatus
if processStatus then
say "Process is still running"
else
say "Process has finished"এখানে, ps কমান্ড ব্যবহার করে আমরা চেক করছি যদি একটি প্রসেস চলমান থাকে।
সারাংশ:
Rexx-এ subprocess ম্যানেজমেন্ট বিভিন্ন ধরনের উপায়ে করা যায়, যেমন বাইরের কমান্ড রান করানো, আউটপুট ক্যাপচার করা, subprocess এর সাথে ইনপুট/আউটপুট রিডিরেক্ট করা, এরর হ্যান্ডলিং করা, ব্যাকগ্রাউন্ড প্রসেস চালানো এবং subprocess এর স্ট্যাটাস চেক করা। এই সমস্ত টেকনিক্স ব্যবহার করে আপনি আপনার Rexx স্ক্রিপ্টকে আরও শক্তিশালী ও ইন্টারঅ্যাকটিভ করতে পারেন, এবং সিস্টেমের অন্যান্য প্রোগ্রামের সাথে মিথস্ক্রিয়া করতে পারবেন।
Read more