একটি কাঁটাচামচ বোমা কিভাবে কাজ করে?


22
  • সতর্কতা একটি উত্পাদন মেশিন এ চালানোর চেষ্টা করবেন না

বিষয়টিতে উইকিপিডিয়া পৃষ্ঠাটি পড়ার সময় আমি সাধারণত নিম্নলিখিত কোডটি দিয়ে যা চলছে তা অনুসরণ করি:

:(){ :|:& };:

বর্ণনার অংশ

নিম্নলিখিত কাঁটাচামচ বোমা 2002 সালে শিল্প হিসাবে উপস্থাপিত হয়েছিল;56 তার সঠিক উৎপত্তি অজানা, কিন্তু এটা ইউজনেট উপর অস্তিত্ব পূর্বে 2002 থেকে বোমা একটি নিম্নলিখিত 13 টি অক্ষর আটকে দিয়ে মৃত্যুদন্ড কার্যকর করা হয় ইউনিক্স যেমন শেল ব্যাশ বা zsh । এটি ':' নামে একটি ফাংশন সংজ্ঞায়িত করে পরিচালনা করে, যা নিজেকে একবার, পূর্বে এবং একবার পটভূমিতে একবার ডাকে।

তবে শেষ বিটটি আমার কাছে সম্পূর্ণ পরিষ্কার নয়। আমি ফাংশন সংজ্ঞা দেখতে:

:(){ ... }

তবে আর কী চলছে? যেমন হিসাবে অন্যান্য শাঁস না ksh, cshএবং tcshএই একই রকম গঠন করা সক্ষম হচ্ছে একই ভাগ্য ভোগে?


2
এই এক বেশ প্রায়ই পপ আপ স্ট্যাকের বিনিময়, একটি ভাল উত্তর এখানে: stackoverflow.com/questions/991142/...
Drav স্লোয়ান

@ ড্রাভস্লোয়ান - আমি এখানে কিছু সামগ্রী তৈরি করার চেষ্টা করছিলাম, আমার প্রশ্নটি 8- তে কিছুটা লোড হয়েছে ed
slm

আপনি বাধ্যতামূলকভাবে যুক্ত করতে চাইতে পারেন "Godশ্বরের ভালবাসার জন্য এটি কোনও প্রোডাকশন মেশিনে চালাবেন না, বা আপনি যদি মেশিনটি চালিয়ে যেতে চান তবে আপনি এটি চালনা করেন !!" বার্তা :)
ড্র স্লোয়ান

1
@ মার্টিনশ্রেডার - আপনি বুঝতে পেরেছেন যে এই প্রশ্নটিই সেই প্রশ্নটি জিজ্ঞাসা করতে পরিচালিত করেছিল? 8-)। আমি শুক্রবার রাতে এটিকে জিজ্ঞাসা করে কিছু যেতে চাই এবং তারপরে অন্য প্রশ্নটি এক ঘন্টা বা 2 পরে এসেছিল।
slm

1
@ মার্টিনশ্রেডার - এগুলি আলাদা হিসাবে রেখে দেওয়া সম্ভবত সেরা, তারা কিছুটা আলাদা। এটি কাঁটা বোমা কীভাবে কাজ করে তার পুরো বিশদ দেখার জন্য জিজ্ঞাসা করছে, অন্য একটি ব্যক্তি কাঁটা বোমার মধ্যে কীভাবে সিস্টেমটি কাঁটাচামচ করছে তার পিছনের প্রক্রিয়া সম্পর্কে বিশদ জানতে চেয়েছিল। আমি জানি এটি বিভ্রান্তিকর বলে মনে হতে পারে যে তারা সম্পর্কিত তবে তারা পৃথক (আইএমও - স্পষ্টতই)। এমনকি আমি অন্যান্য কিউরও উত্তর দিয়েছি এবং কাঁটাচামচ চালাচ্ছে এমন ফণার নীচে প্রক্রিয়াটি দেখানোর চেষ্টা করেছি এবং আমি এটিকে ডুপ হিসাবে চিহ্নিত করি নি flag
slm

উত্তর:


23

এই কাঁটাচামচ বোমা সর্বদা আমাকে এমন কিছু স্মরণ করিয়ে দেয় যা এআই প্রোগ্রামিংয়ের একজন শিক্ষক আমি যে প্রথম পাঠ্য পাঠ করেছিলাম তার একটিতে "পুনরাবৃত্তি বুঝতে, প্রথমে আপনাকে অবশ্যই পুনরাবৃত্তি বুঝতে হবে" said

মূলত, এই বোমাটি একটি পুনরাবৃত্তি ফাংশন। সংক্ষেপে, আপনি একটি ফাংশন তৈরি করেন, যা নিজেকে কল করে, যে নিজেকে কল করে, যা নিজেকে কল করে .... যতক্ষণ না সিস্টেম সংস্থানগুলি গ্রাস হয়। এই নির্দিষ্ট ক্ষেত্রে, পুনরাবৃত্তিটি নিজের মধ্যে ফাংশনটি পাইপ করে এবং এর ব্যাকগ্রাউন্ড করে প্রশস্ত করা হয়।

আমি স্ট্যাক ওভারফ্লোতে এটির উত্তর দেখেছি এবং আমি মনে করি যে সেখানে দেওয়া উদাহরণটি এটি সর্বোত্তমভাবে ব্যাখ্যা করে, কেবল কারণ এটি এক নজরে কী করে তা দেখতে সহজ (উপরের লিঙ্কটি থেকে চুরি হয়েছে ...)

☃(){ ☃|☃& };☃

বাগ ফাংশনটি সংজ্ঞায়িত করুন ☃() { ... }, যার দেহ নিজেকে কল করে (বাগ ফাংশন), আউটপুটটিকে নিজের কাছে পাইপ করে (বাগ ফাংশন) ☃|☃, এবং ফলাফলকে ব্যাকগ্রাউন্ড করে &। তারপরে, ফাংশনটি সংজ্ঞায়িত হওয়ার পরে, বাগ বাগের ফাংশনটি কল করুন ; ☃

আমি নোট করি যে কমপক্ষে আমার আর্চ ভিএম-তে, প্রক্রিয়াটির ব্যাকগ্রাউন্ডের প্রয়োজনীয়তা একই রকমের শেষ ফলাফল হওয়া প্রয়োজন নয়, সমস্ত উপলব্ধ প্রক্রিয়া স্থানটি গ্রাহ্য করতে এবং হোস্টকে বি0rked রেন্ডার করতে হবে। আসলে এখন আমি বলেছি যে এটি কখনও কখনও রান আউট প্রক্রিয়াটি শেষ করে দেবে বলে মনে হয় এবং এর স্ক্রিনফুলের পরে -bash: fork: Resource temporarily unavailableএকটি Terminated(এবং journalctlবাশ কোর ডাম্পিং দেখায়) বন্ধ হয়ে যায়।

Csh / tcsh সম্পর্কে আপনার প্রশ্নের উত্তর দেওয়ার জন্য, এই শেলগুলির কোনওটিই ফাংশন সমর্থন করে না, আপনি কেবলমাত্র উপনাম করতে পারেন। সুতরাং এই শেলগুলির জন্য আপনাকে একটি শেল স্ক্রিপ্ট লিখতে হবে যা নিজেকে পুনরাবৃত্তি বলে।

zsh একই ভাগ্য (একই কোড সহ) ভুগছে বলে মনে হচ্ছে, কোর ডাম্প দেয় না এবং আর্চকে দেয় Out of memory: Kill process 216 (zsh) score 0 or sacrifice child., তবে এটি এখনও কাঁটাচামচ অবিরত করে। কিছুক্ষণ পরে এটি জানায় Killed process 162 (systemd-logind) ...(এবং এখনও একটি কাঁটা zsh থাকা অবিরত)।

আর্কের pacmanকাছে ksh এর কোনও সংস্করণ নেই বলে মনে হচ্ছে , সুতরাং এর পরিবর্তে আমাকে এটি ডিবিয়ানে চেষ্টা করে দেখতে হয়েছিল। ksh অবজেক্টগুলিকে :একটি ফাংশন নাম হিসাবে, তবে কিছু ব্যবহার করে বলুন - এর b()পরিবর্তে পছন্দসই ফলাফল বলে মনে হচ্ছে।


এই চরিত্রগুলি কি? আমি জানি তারা বাগ কিন্তু আপনি এটি কীভাবে তৈরি করেছেন?
slm

10
একটি ছোট ফন্টের আকারে এটি কোনও বাগের মতো দেখায় আপনি দেখতে পাবেন এটি আসলে একজন তুষারমানুষ। এটি ইউনিকোড অক্ষর U + 2603 হবে যা html এ ফাঁকে ছাড়াই & # x 2603 প্রবেশ করে প্রদর্শিত হতে পারে।
স্যাম্বিলার

2
স্পষ্টতই লিনাক্সের অধীনে ননো সম্পর্কিত বেশ কয়েকটি অ্যাপ্লিকেশন এবং ফায়ারফক্স সমর্থন করে Ctrl+Shift+u+<hex>যেখানে আপনি যে ইউনিকোড চরিত্রটি প্রদর্শন করতে চান তার হেক্স কোড হেক্স হয় support দেখারযোগ্য ইউনিকোডের একটি তালিকা এখানে পাওয়া যাবে: fileformat.info/info/unicode/utf8test.htm (বেশিরভাগ বিজোড়গুলি "বিবিধ" বিভাগে রয়েছে)। উইন্ডোজকে সুপারউজার. com / উকশনস / ৪৪৪০২০/২ চেকআউট করা উচিত এবং আমি ব্যক্তিগতভাবে লিঙ্কে উল্লিখিত সরঞ্জামটি ব্যবহার করি unicodeinput.exeবা আমার ব্রাউজারের মাধ্যমে কাটা এবং পেস্ট করি। আপনি সর্বদা এইচটিএমএল সিকোয়েন্স ব্যবহার করতে পারেন যেমন প্রস্তাবিত দ্বারা প্রস্তাবিত।
টানা স্লোয়ান

1
: উইকি একটি ইউনিকোড অক্ষরের তালিকা আছে en.wikipedia.org/wiki/List_of_Unicode_characters
Drav স্লোয়ান

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