উদাহরণ সহ C তে getpid ফাংশন কল করা

Calling Getpid Function C With Examples



Getpid () হল ফাংশনটি সেই প্রক্রিয়াটির প্রসেস আইডি পেতে ব্যবহৃত হয় যা সেই ফাংশনটিকে কল করে। প্রাথমিক প্রক্রিয়ার জন্য PID হল 1, এবং তারপর প্রতিটি নতুন প্রক্রিয়া একটি নতুন আইডি বরাদ্দ করা হয়। পিআইডি পাওয়ার জন্য এটি একটি সহজ পদ্ধতি। এই ফাংশনটি আপনাকে শুধুমাত্র অনন্য প্রসেস আইডি পেতে সাহায্য করে।

আইডি পেতে ব্যবহৃত ফাংশন

এখানে দুই ধরনের আইডি আছে। একটি হল পিআইডি প্রক্রিয়ার বর্তমান আইডি। যেখানে অন্যটি প্যারেন্ট প্রসেস পিপিআইডি এর আইডি। এই দুটি ফাংশন অন্তর্নির্মিত ফাংশন যা লাইব্রেরিতে সংজ্ঞায়িত করা হয়। এই লাইব্রেরি ব্যবহার না করে কোড চালানোর সময় একটি ত্রুটি হতে পারে এবং চালানো বন্ধ হয়ে যায়।







সি তে getpid () ফাংশন

যখন কিছু প্রক্রিয়া গঠিত হয় এবং চলমান থাকে, তখন একটি অনন্য আইডি এটিকে বরাদ্দ করা হয়। এটি প্রক্রিয়া আইডি। এই ফাংশনটি প্রক্রিয়াটির আইডি ফিরিয়ে দিতে সাহায্য করে যা বর্তমানে বলা হয়।



সি তে getppid () ফাংশন

এই আইডিটি প্যারেন্ট প্রসেস/ফাংশনের প্রসেস ফেরত দিতে দরকারী।



উদাহরণ 1
C ভাষায় প্রক্রিয়ায় PID এর উদাহরণ বুঝতে। আপনার দুটি সরঞ্জাম প্রয়োজন: যে কোনও পাঠ্য সম্পাদক এবং লিনাক্স টার্মিনাল, যার উপর আপনার কমান্ডগুলি চালানোর কথা। যেকোনো টেক্সট এডিটরে একটি ফাইল তৈরি করুন। C1 ভাষায় কোড লেখা হওয়ায় আমরা একটি ফাইলের নাম code1.c তৈরি করেছি, তাই এটি .c এক্সটেনশন দিয়ে সংরক্ষণ করা উচিত।





আমরা একটি একক গ্রন্থাগার যুক্ত করেছি। তারপর এখানে মূল প্রোগ্রাম শুরু হয়। মূল প্রোগ্রামে, আমরা বিল্ট-ইন ফাংশনকে getpid () বলি; বর্তমান প্রক্রিয়ার আইডি আনতে। এবং একটি পরিবর্তনশীল চালু এবং বরাদ্দ করা হয়। যাতে PID () ফাংশনের মান এই ভেরিয়েবলে সংরক্ষিত থাকে, তাহলে আমরা এই ভেরিয়েবল ব্যবহার করে মানের প্রিন্ট নেব।



এখন আমরা এই ফাইলের বিষয়বস্তু লিনাক্স টার্মিনালে চালাতে চাই। কোডের পূর্বশর্ত প্রথমে কম্পাইল করা এবং তারপর এক্সিকিউট করা। সংকলনের জন্য, GCC ব্যবহার করা হয়। যদি আপনার সিস্টেমে GCC এর অভাব থাকে, তাহলে আপনাকে প্রথমে Sudo কমান্ড ব্যবহার করে এটি ইনস্টল করতে হবে।

এখন লিখিত কোড কম্পাইল করুন। এটি নিম্নলিখিত সংযুক্ত কমান্ড ব্যবহার করে সম্পন্ন করা যেতে পারে।

$ GCC –o code1 code1.c

যেখানে –o কমান্ডে সেভ ফাইল খুলতে ব্যবহৃত হয়। তারপর –o এর পরে, আমরা ফাইলের নাম লিখি।

সংকলনের পরে, কমান্ডটি চালান।

$ ./code1

উপরের ছবিটি ফাংশনের প্রসেস আইডি দেখায়।

উদাহরণ 2
পূর্ববর্তী উদাহরণে, আমরা পিআইডি ব্যবহার করি। কিন্তু এই উদাহরণে, PID এবং PPID উভয়ই ব্যবহৃত হয়। এই ফাংশনের সোর্স কোড প্রায় আগেরটির মতই। শুধুমাত্র একটি আইডির আরেকটি সংযোজন আছে।

একটি ফাইল বিবেচনা করুন যা প্রধান প্রোগ্রামে দুটি ভেরিয়েবল রয়েছে যা প্রক্রিয়া আইডি দ্বারা নির্ধারিত হয়। একটি বর্তমান প্রক্রিয়ার, এবং অন্যটি মূল প্রক্রিয়ার। তারপর প্রথম উদাহরণের অনুরূপ, উভয় আইডি তাদের ভেরিয়েবলের মাধ্যমে মুদ্রণ করুন।

Int pid_t = getpid ();
Int ppid_t = getppid ();

এই দুটি হল পুরো কোডের প্রধান কাজ। এখন, ফাইল তৈরির পর, পরবর্তী ধাপ হল ফাইলটি কম্পাইল এবং চালানো। কমান্ডে GCC ব্যবহার করে কম্পাইল করুন। সংকলনের পরে, এটি উবুন্টুর টার্মিনালে চালান।

$ GCC –o code1 code1.c
$ ./code1

আউটপুট দেখায় যে প্রসেস আইডি প্রথমে প্রদর্শিত হয়, এবং তারপর প্যারেন্ট প্রসেস আইডি প্রদর্শিত হয়।

উদাহরণ 3
সমস্ত প্রক্রিয়া সমান্তরাল পদ্ধতিতে সঞ্চালিত এবং সম্পাদিত হয়। পিতা -মাতা এবং সন্তানের প্রক্রিয়াগুলি বাকি সমস্ত লাইন সমষ্টিগতভাবে সম্পাদন করে। দুটোই একবারে ফলাফল দেয়। কিন্তু সি কোডে একটি কাঁটা ব্যবহার করে, যদি এই ফাংশনটি 0 এর চেয়ে কম মান প্রদান করে, তাহলে এর মানে হল যে ফাংশন কলটি বন্ধ করা হয়েছে।

সংশ্লিষ্ট হেডারে দুটি লাইব্রেরি থাকা একটি নতুন ফাইল বিবেচনা করুন। এখানে একটি শর্ত ব্যবহার করা হয়েছে যেখানে আমরা if-else স্টেটমেন্ট ব্যবহার করেছি। মূল প্রোগ্রামে, বলা হয়েছে যে যদি কাঁটাচামচ মান –ive ভ্যালুতে থাকে, এটি একটি বার্তা প্রদর্শন করবে যে প্রক্রিয়াটির আইডি ব্যর্থ এবং প্রাপ্ত হবে না। যদি পরিস্থিতি মিথ্যা হয়, তাহলে কম্পাইলার শর্তের অন্য অংশে চলে যাবে। এই অংশে, প্রক্রিয়া আইডি প্রাপ্ত হয়, তারপর আমরা এই প্রক্রিয়া আইডি প্রদর্শন করব এবং একটি বার্তা প্রদর্শন করব যে প্রক্রিয়া আইডি প্রাপ্ত। এখানে আমরা সোর্স কোডের if-else স্টেটমেন্ট উদ্ধৃত করব।

এখন আবার, কোড কম্পাইল করুন এবং তারপর এটি চালান।

./code2

আউটপুট দেখায় যে অন্য অংশটি কার্যকর করা হয়েছে এবং প্রক্রিয়া আইডি মুদ্রণ করবে এবং তারপর একটি পিআইডি বার্তা প্রদর্শন করবে।

উদাহরণ 4

এটি একই ধারণা ব্যাখ্যা করার আরেকটি উদাহরণ। ফর্ক () ফাংশন দুটি ভিন্ন মান প্রদান করে। একটি শিশু প্রক্রিয়ার ক্ষেত্রে, মান 0, যা ফেরত দিতে হবে। একই সময়ে, পিতামাতার প্রক্রিয়ার ক্ষেত্রে মান হল নতুন সন্তানের প্রসেস আইডি।

এই উদাহরণে, একই if_else অবস্থা ব্যবহার করা হয়। কিন্তু এখানে দুটি শর্ত প্রযোজ্য। PID যা শূন্যের চেয়ে কম এবং অন্যটি শূন্যের সমান। যদি পিআইডি শূন্যের কম হয়, তাহলে এটি একটি ত্রুটি বার্তা দেখাবে। যদিও যদি পিআইডি শূন্যের সমান হয়, তার মানে এটি একটি শিশু প্রক্রিয়া, এবং অন্য অংশ দেখায় যে যদি পিআইডি শূন্যের চেয়ে বড় হয় তবে এটি একটি পিতামাতার প্রক্রিয়া।

এখন কোডটি কম্পাইল করে রান করুন।

$ gcc –o code3 code3.c
$।/কোড 3

আউটপুট থেকে, আমরা দেখতে পাচ্ছি যে অন্য অংশটি প্রথমে মুদ্রিত হয়েছে মানে প্রক্রিয়া আইডি 0 এর চেয়ে বড়।

উদাহরণ 5
ঠিক আছে, এটিই শেষ উদাহরণ যেখানে আমরা এই ফাংশনের কাজ ব্যাখ্যা করার জন্য উপরে বর্ণিত সমস্ত কোডের সমষ্টি করার চেষ্টা করেছি। আমরা getpid () ফাংশন ব্যবহার করতে fork () ফাংশন সহ লুপ ব্যবহার করতে পারি। আমরা অনেক শিশু প্রক্রিয়া তৈরি করতে লুপ ব্যবহার করতে পারি। এখানে আমাদের লুপে 3 এর মান ব্যবহার করতে হবে।

আবার আমাদের কোডে শর্তাধীন বিবৃতি ব্যবহার করতে হবে। For লুপ এক থেকে শুরু হয় এবং 3 পর্যন্ত পুনরাবৃত্তি করেrdপালা

এখন ফাইলটি সেভ করুন এবং এক্সিকিউট করুন। কোডটি একক কমান্ডে কম্পাইল এবং এক্সিকিউট করার আরেকটি সহজ পদ্ধতি রয়েছে। এটাই.

$ GCC codes5.c so s & ./code5

এখন কোডের আউটপুটের দিকে এগিয়ে যাচ্ছে। সকল সন্তানের প্রক্রিয়ায় অভিভাবক প্রক্রিয়ার আইডি অভিন্ন। এর অর্থ এই সমস্ত প্রক্রিয়া এক পিতামাতার অন্তর্গত। এই প্রক্রিয়াগুলি একের পর এক চালানো হয় কারণ লুপটি 3 এর মধ্যে সীমাবদ্ধ। শুধুমাত্র 3 টি পুনরাবৃত্তি করা হবে।

উপসংহার

এই নিবন্ধটিতে লিনাক্স কমান্ডগুলিতে মৌলিক জ্ঞান এবং একটি getPID () ফাংশনের কাজ রয়েছে। এই ফাংশনের মাধ্যমে প্রতিটি প্রক্রিয়ায় ইউনিক আইডি নির্ধারিত হয়।