কোডের শেষ বিটটি ;:
ফাংশনটি চালাচ্ছে :(){ ... }
। এখানেই কাঁটাচামচ ঘটছে।
সেমিকোলন প্রথম কমান্ডটি সমাপ্ত করে, এবং আমরা অন্যটি শুরু করব, অর্থাৎ ফাংশনটি শুরু করছি :
। এই ফাংশনটির সংজ্ঞাটিতে নিজের কাছে একটি কল অন্তর্ভুক্ত রয়েছে ( :
) এবং এই কলটির আউটপুট একটি পটভূমি সংস্করণে পাইপ করা হয় :
। এটি অনির্দিষ্টকালের জন্য প্রক্রিয়া চালিত করে।
প্রতিবার আপনি ফাংশন আহ্বান করছি :()
আপনি সি ফাংশন আহ্বান করছি fork()
। শেষ পর্যন্ত এটি সিস্টেমে সমস্ত প্রক্রিয়া আইডি (পিআইডি) নিঃশেষ করবে।
উদাহরণ
আপনি |:&
অন্য কোনও কিছুর সাথে সরিয়ে নিতে পারবেন যাতে কী চলছে সে সম্পর্কে আপনি ধারণা পেতে পারেন।
একজন প্রহরী সেটআপ করুন
একটি টার্মিনাল উইন্ডোতে এটি করুন:
$ watch "ps -eaf|grep \"[s]leep 61\""
"ফিউজ বিলম্বিত" কাঁটাচামচ বোমা সেটআপ করুন
অন্য উইন্ডোতে আমরা কাঁটাচামচের বোমাটির কিছুটা পরিবর্তিত সংস্করণ চালাব। এই সংস্করণটি নিজেই থ্রটল করার চেষ্টা করবে যাতে এটি কী করছে তা আমরা অধ্যয়ন করতে পারি। আমাদের সংস্করণটি ফাংশনটি কল করার আগে 61 সেকেন্ডের জন্য ঘুমাবে :()
।
এছাড়াও প্রাথমিক কলটি শুরুর পরে আমরা পাশাপাশি ব্যাকগ্রাউন্ড করব। Ctrl+ zটাইপ করুন bg
।
$ :(){ sleep 61; : | : & };:
# control + z
[1]+ Stopped sleep 61
[2] 5845
$ bg
[1]+ sleep 61 &
এখন যদি আমরা jobs
প্রাথমিক উইন্ডোতে কমান্ডটি চালিত করি তবে আমরা এটি দেখতে পাবো:
$ jobs
[1]- Running sleep 61 &
[2]+ Running : | : &
কয়েক মিনিট পরে:
$ jobs
[1]- Done sleep 61
[2]+ Done : | :
প্রহরীটির সাথে চেক ইন করুন
ইতিমধ্যে অন্য উইন্ডোতে আমরা যেখানে চলছে watch
:
Every 2.0s: ps -eaf|grep "[s]leep 61" Sat Aug 31 12:48:14 2013
saml 6112 6108 0 12:47 pts/2 00:00:00 sleep 61
saml 6115 6110 0 12:47 pts/2 00:00:00 sleep 61
saml 6116 6111 0 12:47 pts/2 00:00:00 sleep 61
saml 6117 6109 0 12:47 pts/2 00:00:00 sleep 61
saml 6119 6114 0 12:47 pts/2 00:00:00 sleep 61
saml 6120 6113 0 12:47 pts/2 00:00:00 sleep 61
saml 6122 6118 0 12:47 pts/2 00:00:00 sleep 61
saml 6123 6121 0 12:47 pts/2 00:00:00 sleep 61
প্রক্রিয়াক্রমক্রম
এবং একটি ps -auxf
এই প্রক্রিয়া শ্রেণিবিন্যাস দেখায়:
$ ps -auxf
saml 6245 0.0 0.0 115184 5316 pts/2 S 12:48 0:00 bash
saml 6247 0.0 0.0 100988 468 pts/2 S 12:48 0:00 \_ sleep 61
....
....
saml 6250 0.0 0.0 115184 5328 pts/2 S 12:48 0:00 bash
saml 6268 0.0 0.0 100988 468 pts/2 S 12:48 0:00 \_ sleep 61
saml 6251 0.0 0.0 115184 5320 pts/2 S 12:48 0:00 bash
saml 6272 0.0 0.0 100988 468 pts/2 S 12:48 0:00 \_ sleep 61
saml 6252 0.0 0.0 115184 5324 pts/2 S 12:48 0:00 bash
saml 6269 0.0 0.0 100988 464 pts/2 S 12:48 0:00 \_ sleep 61
...
...
সময় পরিষ্কার করুন
এ killall bash
জিনিসগুলি হাতছাড়া হওয়ার আগেই থামিয়ে দেবে। আপনার ক্লিন আপটি এইভাবে করা কিছুটা ভারী হাতের হতে পারে, একটি মৃদু মৃদু উপায় যা সম্ভাব্যভাবে প্রতিটি bash
শেলটি ছিঁড়ে না ফেলে, নিম্নলিখিতটি করা হবে:
ফর্ক বোমাটি কোন সিউডো টার্মিনালটি চালু হতে চলেছে তা নির্ধারণ করুন
$ tty
/dev/pts/4
সিউডো টার্মিনালটি মেরে ফেলুন
$ pkill -t pts/4
তো কেমন যাচ্ছে?
ওয়েল প্রতিটি আবাহন bash
এবং sleep
সি ফাংশন একটি কল fork()
থেকে bash
যেখানে কমান্ডটি প্রয়োগ হওয়ার পর থেকে শেল।