কোন প্রক্রিয়া `/ proc / স্ব /`?


40

https://www.centos.org/docs/5/html/5.2/Depدام_ Guide/ s3- proc- self.html বলছে

/proc/self/ডিরেক্টরি বর্তমানে চলমান প্রক্রিয়া একটি লিঙ্ক।

সর্বদা একযোগে একাধিক প্রক্রিয়া চলমান থাকে, সুতরাং কোন প্রক্রিয়াটি "বর্তমানে চলমান প্রক্রিয়া"?

কনটেক্সট স্যুইচিংয়ের কথা বিবেচনা করে সিপিইউতে বর্তমানে কোন প্রক্রিয়া চলছে তার সাথে "বর্তমানে চলমান প্রক্রিয়া" এর কি কোনও সম্পর্ক আছে?

"বর্তমানে চলমান প্রক্রিয়া" এর অগ্রভাগ এবং পটভূমি প্রক্রিয়াগুলির সাথে কোনও সম্পর্ক নেই?


15
প্রক্রিয়া /proc/selfঅবশ্যই মূল্যায়ন করে ।
চার্লস ডাফি

8
কোনটি ব্যক্তি না আমি এবং আমার পড়ুন?
জেফ্রি বসবুম

উত্তর:


64

অগ্রভূমি এবং পটভূমি প্রক্রিয়াগুলির সাথে এর কোনও সম্পর্ক নেই; এটি কেবল বর্তমানে চলমান প্রক্রিয়াটির সাথে সম্পর্কিত। যখন কার্নেলটি "কী /proc/selfনির্দেশ করে?" এর প্রশ্নের উত্তর দিতে হয় , এটি কেবলমাত্র নির্ধারিত পিডটি তোলে , অর্থাত্ চলমান চলমান প্রক্রিয়া (বর্তমান লজিক্যাল সিপিইউতে)। এর প্রভাবটি /proc/selfসর্বদা জিজ্ঞাসা প্রোগ্রামের পিডকে নির্দেশ করে; যদি আপনি চালান

ls -l /proc/self

আপনি lsপিড দেখতে পাবেন , আপনি যদি কোডটি লিখে থাকেন যা /proc/selfসেই কোডটি ব্যবহার করে তার নিজস্ব পিড ইত্যাদি দেখতে পাবে


13
এটি একটি অর্থে "নির্ভুল", তবে কার্নেলের "বর্তমান" ধারণাটি বোঝে না এমন ব্যক্তির পক্ষে অর্থপূর্ণ নয়। এর থেকে আরও ভাল উত্তরটি হ'ল এটি প্রক্রিয়াটি এর আর্গুমেন্টগুলির মধ্যে একটির সাথে নামের নামটির অংশ হিসাবে সিস্টেম কল করে /proc/self
আর ..

1
@ আর .. ইলক্কাচুর জবাব হাইলাইট করেছে, নির্দ্বিধায় সেটিকে উজ্জীবিত করতে পারে - আমি করেছি।
স্টিফেন কিট

36

যেটি সিমিলিংকটি অ্যাক্সেস করে (এটির উপরে রিডলিংক () কল করে বা এটি দিয়ে কোনও পথে খোলা হয়)। এটি সেই সময় সিপিইউতে চলবে, তবে এটি প্রাসঙ্গিক নয়। একটি মাল্টিপ্রসেসর সিস্টেমের সিপিইউতে একসাথে বেশ কয়েকটি প্রক্রিয়া থাকতে পারে।

অগ্রভূমি এবং পটভূমি প্রক্রিয়াগুলি বেশিরভাগ ক্ষেত্রে একটি শেল কনস্ট্রাক্ট হয় এবং সিস্টেমের সমস্ত শেল সেশনগুলির একটি থাকায় কোনও অনন্য অগ্রভাগ প্রক্রিয়া হয় না।


27

শব্দগুচ্ছটি আরও ভাল হতে পারে তবে তারপরে আবার কোনও শব্দ যা আপনি স্বতঃপ্রকাশের ধারণাটি প্রকাশ করার জন্য রচনা করতে চেষ্টা করেছিলেন তা বিভ্রান্তিকর হতে চলেছে। ডিরেক্টরিটির নামটি আমার মতে আরও বর্ণনামূলক।

মূলত, /proc/self/যে প্রক্রিয়াটি পড়ছে তা প্রতিনিধিত্ব করে /proc/self/। সুতরাং আপনি যদি /proc/self/কোনও সি প্রোগ্রাম থেকে খোলার চেষ্টা করেন তবে এটি সেই প্রোগ্রামটির প্রতিনিধিত্ব করে। যদি আপনি শেল থেকে এটি করার চেষ্টা করেন তবে এটি শেল ইত্যাদি

কিন্তু যদি আপনার কোয়াড কোর সিপিইউ একসাথে 4 টি প্রক্রিয়া চালিত করতে সক্ষম হয় তবে বাস্তবের জন্য, মাল্টিটাস্কিং নয়?

তারপরে প্রতিটি প্রক্রিয়া একে অপরেরকে দেখতে /proc/self/না পেয়ে বাস্তবের জন্য আলাদা দেখতে পাবে /proc/self/

কিভাবে কাজ করে?

ঠিক আছে, /proc/self/আসলেই কোনও ফোল্ডার নয়। এটি এমন একটি ডিভাইস ড্রাইভার যা যদি আপনি এটি অ্যাক্সেস করার চেষ্টা করেন তবে ফোল্ডার হিসাবে নিজেকে প্রকাশ করে। কারণ এটি ফোল্ডারগুলির জন্য প্রয়োজনীয় এপিআই প্রয়োগ করে। /proc/self/ডিরেক্টরিটি কেবল এটিই করে না। দূরবর্তী সার্ভারগুলি থেকে মাউন্ট করা ভাগ বা ইউএসবি থাম্বড্রাইভ বা ড্রপবক্স থেকে ভাগ করা ফোল্ডারগুলি বিবেচনা করুন। তারা সকলেই একই সেট এপিআই প্রয়োগ করে কাজ করে যা তাদের ফোল্ডারের মতো আচরণ করে।

যখন কোনও প্রক্রিয়া /proc/self/ডিভাইস ড্রাইভারটি অ্যাক্সেস করার চেষ্টা করে তখন সেই প্রক্রিয়াটি থেকে ডেটা পড়ার মাধ্যমে তার বিষয়বস্তুগুলি গতিশীলভাবে উত্পন্ন করবে। সুতরাং ফাইলগুলি /proc/self/আসলে বিদ্যমান নেই। এটি এক ধরনের আয়নার মতো যা এটি দেখার চেষ্টা করে এমন প্রক্রিয়াটির প্রতিফলন ঘটায়।

আসলেই কি এটি কোনও ডিভাইস ড্রাইভার? আপনি এমন শব্দগুলি শুনছেন যা আপনি জিনিসগুলিকে অতিবাহিত করছেন!

হ্যাঁ, এটি আসলেই। আপনি যদি পেডেন্টিক হতে চান তবে এটি একটি কার্নেল মডিউল। তবে আপনি যদি বিভিন্ন লিনাক্স বিকাশকারী চ্যানেলগুলিতে ইউজনেট পোস্টগুলি পরীক্ষা করে থাকেন তবে বেশিরভাগ কার্নেল বিকাশকারীরা "ডিভাইস ড্রাইভার" এবং "কার্নেল মডিউল" বিনিময়যোগ্যভাবে ব্যবহার করে। আমি লিনাক্সের জন্য ডিভাইস ড্রাইভার, এরর ... কার্নেল মডিউলগুলি লিখতাম to আপনি যদি নিজের ইন্টারফেসটিতে লিখতে চান তবে /proc/উদাহরণস্বরূপ বলুন আপনি এমন একটি /proc/unix.stackexchange/ফাইল সিস্টেম চান যা এই ওয়েবসাইট থেকে পোস্টগুলি ফেরত দেয় আপনি ও'রিলির দ্বারা প্রকাশিত সম্মানজনক "লিনাক্স ডিভাইস ড্রাইভার" বইটিতে এটি কীভাবে করবেন তা সম্পর্কে পড়তে পারেন। এটি অনলাইনে সফটকপি হিসাবে উপলব্ধ।


6
/proc/selfএটি কোনও ডিভাইস ড্রাইভার নয়, তবে এটি পরিবর্তে আ কার্নেল-এক্সপোজড ফাইল সিস্টেমের অংশ procfs
ক্রিস ডাউন

1
@ ক্রিসডাউন: হ্যাঁ তবে এটি কার্নেল মডিউল হিসাবে প্রয়োগ করা হয়েছে - এটি ডিভাইস ড্রাইভারের লিনাক্সের সংস্করণ /procthe "লিনাক্স ডিভাইস ড্রাইভারস" নামক গ্রন্থে ভিত্তিক ড্রাইভারের উদাহরণ প্রয়োগও রয়েছে । আমার জানা উচিত, আমি কলেজে একটি বাস্তবায়ন করেছি। আমি সম্ভবত এর পরিবর্তে "কার্নেল মডিউল" শব্দটি ব্যবহার করতে পারতাম তবে "ডিভাইস ড্রাইভার" এটাই যে বেশিরভাগ লোকের সাথে পরিচিত এবং আমি এই বিভ্রান্তিমূলক ধারণাটি দিতে চাই না যে "কার্নেল মডিউল" এবং "ডিভাইস ড্রাইভার" এর মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে পরিভাষা বাদে।
slebetman

7
@ স্লেবেটম্যান ভাল, প্রোফসগুলি প্রতি সেমি মডিউল নয় , এটি কেবলমাত্র নির্মিত হতে পারে, মডিউল হিসাবে কখনও তৈরি করা যায় না। আপনি চুলগুলি বিভক্ত করতে চান, চুলগুলি বিভক্ত করতে হবে এটি একটি ফাইল সিস্টেম ড্রাইভার, কোনও ডিভাইস ড্রাইভার নয়
hobbs

10

এটির যে কোনও প্রক্রিয়া অ্যাক্সেস হতে পারে /proc/selfবা এর মধ্যে ফাইল / ফোল্ডার রয়েছে।

ব্যবহার করে দেখুন cat /proc/self/cmdline। আপনি পেয়ে যাবেন, আশ্চর্য অবাক হবেন cat /proc/self/cmdline, (আসলে কোনও জায়গার পরিবর্তে tএবং এর মধ্যে একটি নাল চরিত্র থাকবে /) কারণ এটি এই সিডোফাইলে অ্যাক্সেস করার বিড়াল প্রক্রিয়া হবে।

আপনি যখন এটি করেন ls -l /proc/self, আপনি নিজেই ls প্রক্রিয়াটির পিড দেখতে পাবেন। বা কীভাবে ls -l /proc/self/exe; এটি এক্সিকিউটেবলকে নির্দেশ করবে।

বা পরিবর্তনের জন্য এটি ব্যবহার করে দেখুন:

$ cp /proc/self/cmdline /tmp/cmd
$ hexdump -C /tmp/cmd
00000000  63 70 00 2f 70 72 6f 63  2f 73 65 6c 66 2f 63 6d  |cp./proc/self/cm|
00000010  64 6c 69 6e 65 00 2f 74  6d 70 2f 63 6d 64 00     |dline./tmp/cmd.|
0000001f

অথবা এমনকি

$ hexdump -C /proc/self/cmdline 
00000000  68 65 78 64 75 6d 70 00  2d 43 00 2f 70 72 6f 63  |hexdump.-C./proc|
00000010  2f 73 65 6c 66 2f 63 6d  64 6c 69 6e 65 00        |/self/cmdline.|
0000001e

আমি যেমন বলেছি, এটির যে কোনও প্রক্রিয়া অ্যাক্সেস হতে /proc/selfবা ফাইল / ফোল্ডারগুলিতে এতে ঘটে ।


2

/ প্রকোপ / স্ব হ'ল সিনট্যাকটিক চিনি। এটি / প্রো / / কে প্রতিরোধ করার শর্টকাট এবং গেটপিড () সিস্কেল (বিপদে প্রবেশযোগ্য as হিসাবে অ্যাক্সেসযোগ্য) এর ফলাফল। এটি শেল স্ক্রিপ্টিংয়ের ক্ষেত্রে বিভ্রান্ত হয়ে উঠতে পারে, কারণ অনেকগুলি বিবৃতি অন্যান্য প্রক্রিয়াগুলিকে অনুরোধ করে, নিজস্ব পিআইডি দিয়ে সম্পূর্ণ ... পিআইডি যা মৃত প্রক্রিয়াগুলি প্রায়শই না বোঝায়। বিবেচনা:

root@vps01:~# ls -l /proc/self/fd
total 0
lrwx------ 1 root root 64 Jan  1 01:51 0 -> /dev/pts/0
lrwx------ 1 root root 64 Jan  1 01:51 1 -> /dev/pts/0
lrwx------ 1 root root 64 Jan  1 01:51 2 -> /dev/pts/0
lr-x------ 1 root root 64 Jan  1 01:51 3 -> /proc/26562/fd
root@vps01:~# echo $$
593

'/ বিন / ls' ডিরেক্টরিটির পথটিকে মূল্যায়ন করবে / / proc / 26563 হিসাবে সমাধান করবে, যেহেতু এটিই প্রক্রিয়াটির পিআইডি - নতুন নির্মিত / বিন / এলএস প্রক্রিয়া - যা ডিরেক্টরিতে থাকা বিষয়বস্তু পড়ে। তবে পাইপলাইনের পরবর্তী প্রক্রিয়াটি, শেল স্ক্রিপ্টিংয়ের ক্ষেত্রে, বা প্রম্পট ফিরে আসার সময়ে, ইন্টারেক্টিভ শেলের ক্ষেত্রে, পথটি আর বিদ্যমান নেই এবং তথ্য আউটপুট একটি অস্তিত্বহীন প্রক্রিয়া বোঝায়।

এটি কেবল বাহ্যিক কমান্ডের ক্ষেত্রেই প্রযোজ্য, তবে (শেল নিজেই তৈরির বিপরীতে প্রকৃত নির্বাহযোগ্য প্রোগ্রাম ফাইলগুলি)। সুতরাং, আপনি যদি বাহ্যিক প্রক্রিয়া / বিন / এলএসে পথের নামটি লেখার পরিবর্তে ডিরেক্টরিটির বিষয়বস্তুগুলির একটি তালিকা পেতে ফাইলের নাম গ্লোব্বিং ব্যবহার করেন তবে আপনি বিভিন্ন ফলাফল পাবেন:

root@vps01:~# ls /proc/self/fd
0  1  2  3
root@vps01:~/specs# echo /proc/self/fd/*
/proc/self/fd/0 /proc/self/fd/1 /proc/self/fd/2 /proc/self/fd/255 /proc/self/fd/3

প্রথম লাইনে, শেলটি একটি নতুন প্রক্রিয়া তৈরি করেছিল, '/ bin / ls', এক্সিকিউটি () সিস্টেমের মাধ্যমে, "/ proc / self / fd" কে আরগভ [1] হিসাবে পাস করে। '/ বিন / এলএস', এরপরে, ডিরেক্টরিটি / proc / self / fd খুলুন এবং পড়ুন, তারপরে মুদ্রণ করুন, এটির উপর এটি পুনরুক্ত হয়।

দ্বিতীয় লাইনটি ফাইলের নামের তালিকা প্রসারিত করতে পর্দার পিছনে গ্লোব () ব্যবহার করে; প্রতিধ্বনির জন্য এগুলি স্ট্রিংগুলির অ্যারে হিসাবে পাস করা হয়েছে। (সাধারণত একটি অভ্যন্তরীণ কমান্ড হিসাবে প্রয়োগ করা হয়, তবে প্রায়শই একটি / বিন / প্রতিধ্বনি বাইনারি থাকে ... তবে সেই অংশটি আসলে অপ্রাসঙ্গিক, কারণ প্রতিধ্বনি কেবল স্ট্রিং নিয়েই কাজ করে যা পথের সাথে সম্পর্কিত কোনও সিস্টেমে ফিড করে না))

এখন, নিম্নলিখিত কেসটি বিবেচনা করুন:

root@vps01:~# cd /proc/self/fd
root@vps01:~# ls
0  1  2  255

এখানে, শেল, / bin / ls এর পিতামাতার প্রক্রিয়াটি, তার বর্তমান ডিরেক্টরিটি / proc / স্বের একটি উপ-ডিরেক্টরি তৈরি করেছে । সুতরাং, আপেক্ষিক পথের নামগুলি এর দৃষ্টিকোণ থেকে মূল্যায়ন করা হয়। আমার সেরা অনুমান যে এটি পসিক্স ফাইল শব্দার্থবিদ্যার সাথে সম্পর্কিত যেখানে আপনি কোনও ওপেন ফাইল বর্ণনাকারী সহ কোনও ফাইলে একাধিক হার্ড লিঙ্ক তৈরি করতে পারেন । এবার, / বিন / এলএস একই প্রতিপাদনা / প্রকো / $$ / এফডি / * এর সাথে আচরণ করে।


-2

হিসাবে পৃথক প্রক্রিয়াতে ম মত শেল পূজা প্রোগ্রাম, জন্য / proc / স্ব আপ হিসেবে দেখাবে সিমবলিক লিঙ্ক থেকে nnnnn , যেখানে nnnnn ম প্রক্রিয়া প্রক্রিয়া আইডি নয়। আমি যতদূর জানি, সাধারণত ব্যবহৃত শেলগুলির মধ্যে সিমলিংকগুলি পড়ার জন্য কোনও বিল্টিন নেই, তবে পার্লের রয়েছে:

perl -e 'মুদ্রণ "/ proc / স্ব লিঙ্ক:", পঠন লিঙ্ক ("/ proc / স্ব"), "- পিড $$ \ n";'

সুতরাং / proc / স্ব একটি সিমিলিংকের মতো আচরণ করে তবে প্রোফস ফাইল সিস্টেম এটিকে "ম্যাজিকালি" প্রক্রিয়া সচেতন করে তোলে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.