আমি কেন কাঁটা বোমা দিয়ে আমার সিস্টেমটি ক্র্যাশ করতে পারি না?


54

সম্প্রতি আমি জিএনইউ / লিনাক্সের প্রক্রিয়াগুলি সম্পর্কে তথ্য সন্ধান করছি এবং আমি কুখ্যাত কাঁটাচামচ বোমার সাথে দেখা করেছি:

:(){ : | :& }; :

তাত্ত্বিকভাবে, সিস্টেমটি সংস্থান শেষ না হওয়া অবধি নিজের অনন্য নকল করার কথা ...

যাইহোক, আমি একটি সিএলআই ডিবিয়ান এবং একটি জিইউআই মিন্ট ডিস্ট্রো উভয়ই পরীক্ষা করার চেষ্টা করেছি এবং এটি সিস্টেমটিতে খুব বেশি প্রভাব ফেলবে বলে মনে হয় না। হ্যাঁ এমন অনেকগুলি প্রক্রিয়া রয়েছে যা তৈরি করা হয় এবং কিছুক্ষণ পরে আমি কনসোল বার্তাগুলিতে পড়ি যেমন:

বাশ: কাঁটাচামচ: রিসোর্স অস্থায়ীভাবে অনুপলব্ধ

বাশ: কাঁটাচামচা: পুনরায় চেষ্টা করুন: কোনও শিশু প্রক্রিয়া নেই

তবে কিছু সময়ের পরে, সমস্ত প্রক্রিয়া খুন হয়ে যায় এবং সবকিছু স্বাভাবিক হয়ে যায়। আমি পড়েছি যে ইউলিমিট ব্যবহারকারী হিসাবে সর্বাধিক পরিমাণে প্রক্রিয়া সেট করে, তবে আমি এটি এখনও পর্যন্ত বাড়িয়ে তুলতে সক্ষম হতে পারব না।

একটি কাঁটাচামচ বিরুদ্ধে সিস্টেম সুরক্ষা কি? সবকিছু হিমশীতল বা কমপক্ষে অনেকটা পিছিয়ে না হওয়া পর্যন্ত কেন এটি নিজেকে প্রতিলিপি করে না? একটি কাঁটাচামচ বোমা দিয়ে একটি সিস্টেম সত্যিই ক্র্যাশ করার উপায় আছে?


2
আপনার সর্বোচ্চ PID বর্তমানে সেট করা আছে?
dsstorefile1

5
নোট করুন যে আপনি কাঁটা বোমা ব্যবহার করে আপনার সিস্টেমটিকে "ক্রাশ" করবেন না ... যেমন আপনি বলেছিলেন, আপনি সংস্থানগুলি সরিয়ে ফেলবেন এবং নতুন প্রক্রিয়া উত্সাহিত করতে সক্ষম হবেন না তবে সিস্টেমটি ক্র্যাশ
জোশ

2
:(){ :& :; }; :পরিবর্তে দৌড়ালে কী হয় ? তারাও কি সবশেষে মেরে ফেলা? কি হবে :(){ while :& do :& done; }; :?
mtraceur

আপনার এই দুর্দান্ত প্রশ্নটি আমার আগের "ছুটি বন্ধ" ভোটের পুনর্বিবেচনা করতে রাজি হয়েছে। তবে, "আমি" সর্বদা ইংরেজিতে বড় হাতের নাগালে দয়া করে আর খারাপভাবে লিখবেন না।
ব্যবহারকারী 259412

উত্তর:


86

আপনার সম্ভবত একটি লিনাক্স ডিস্ট্রো রয়েছে যা সিস্টেমেড ব্যবহার করে।

সিস্টেমড প্রতিটি ব্যবহারকারীর জন্য একটি সিগ্রুপ তৈরি করে এবং ব্যবহারকারীর সমস্ত প্রক্রিয়া একই ক্রগ্রুপের অন্তর্ভুক্ত।

সিসগ্রুপ হ'ল একটি সিস্টেমের সংস্থান যেমন সর্বাধিক সংখ্যক প্রক্রিয়া, সিপিইউ চক্র, র‍্যাম ব্যবহার ইত্যাদির সীমা নির্ধারণের জন্য একটি লিনাক্স প্রক্রিয়া ulimitযা এটি getrlimit()সিস্কাল ব্যবহার করে ) এর চেয়ে আলাদা, আরও আধুনিক, সংস্থানগুলির স্তর সীমিত করে তোলে।

আপনি যদি চালনা করেন systemctl status user-<uid>.slice(যা ব্যবহারকারীর cgroup প্রতিনিধিত্ব করে), আপনি বর্তমান এবং সর্বাধিক সংখ্যক কার্য (প্রক্রিয়া এবং থ্রেড) দেখতে পাবেন যা সেই সিগ্রুপের মধ্যে অনুমোদিত।

ct systemctl স্থিতি ব্যবহারকারী- ID ইউআইডি.স্লাইস
● ব্যবহারকারী -22001.স্লাইস - ইউআইডি 22001 এর ব্যবহারকারী স্লাইস
   লোড: লোড হয়েছে
  ড্রপ - ইন:
           └─10-defaults.conf
   সক্রিয়: সোম থেকে সক্রিয় 2018-09-10 17:36:35 ইস্ট; 1 সপ্তাহ 3 দিন আগে
    কার্য: 17 (সীমা: 10267)
   স্মৃতি: 616.7 এম

ডিফল্টরূপে, সিস্টেমড প্রতিটি ব্যবহারকারীর জন্য সর্বাধিক সংখ্যক কাজগুলি "সিস্টেম-প্রশস্ত সর্বোচ্চ" ( sysctl kernel.threads-max) এর 33% হয় ; এটি সাধারণত 10,000 ডলার কাজের পরিমাণ। আপনি যদি এই সীমাটি পরিবর্তন করতে চান:

  • Systemd v239 এবং তার পরে, ব্যবহারকারীর ডিফল্টটি টাস্কম্যাক্স = ইন এর মাধ্যমে সেট করা থাকে :

    /usr/lib/systemd/system/user-.slice.d/10-defaults.conf
    

    নির্দিষ্ট ব্যবহারকারীর সীমাটি সামঞ্জস্য করতে (যা অবিলম্বে প্রয়োগ করা হবে পাশাপাশি /etc/systemd/system.control এ সংরক্ষণ করা হবে), চালনা করুন:

    systemctl [--runtime] set-property user-<uid>.slice TasksMax=<value>
    

    ইউনিটের সেটিংস (যেমন systemctl edit) ওভাররাইড করার স্বাভাবিক প্রক্রিয়াগুলি এখানেও ব্যবহার করা যেতে পারে তবে তাদের পুনরায় বুট করার দরকার পড়ে। উদাহরণস্বরূপ, আপনি যদি প্রতিটি ব্যবহারকারীর সীমা পরিবর্তন করতে চান তবে আপনি তৈরি করতে পারেন /etc/systemd/system/user-.slice.d/15-limits.conf

  • Systemd v238 এবং তার আগে, ব্যবহারকারীর ডিফল্টটি ইউজার টাস্কম্যাক্স = ইন এর মাধ্যমে সেট করা থাকে/etc/systemd/logind.conf । মান পরিবর্তন করতে সাধারণত একটি রিবুট দরকার।

এই সম্পর্কে আরও তথ্য:


5
এবং ১২২৮৮ টি প্রক্রিয়া (বোমার বিস্ফোরণের আগে মাইনাস যা তৈরি হয়েছিল) একটি নতুন তৈরির চেষ্টা করা ছাড়া কিছুই করছে না , এটি কোনও আধুনিক ব্যবস্থায় আসলেই প্রভাব ফেলবে না।
মাস্তে

13

এটি আর যাইহোক আধুনিক লিনাক্স সিস্টেমগুলি ক্রাশ করবে না।

এটি প্রক্রিয়াগুলির হোর্ডগুলি তৈরি করে তবে প্রক্রিয়াগুলি নিষ্ক্রিয় হওয়ার সাথে সাথে এতগুলি সিপিইউ সত্যিই জ্বলে না। আপনি এখন র‌্যামের বাইরে চলে যাওয়ার আগে প্রক্রিয়া টেবিলের স্লট শেষ করেছেন।

আপনি যদি হিকুফের নির্দেশ হিসাবে সিগ্রুপ সীমাবদ্ধ না হন, নিম্নলিখিত পরিবর্তনগুলি এখনও সিস্টেমকে নীচে নামায়:

:(){ : | :& : | :& }; :

5
আপনি সিস্টেমটিকে 'ক্র্যাশ করা' বিবেচনা করে এটি নির্ভর করে। প্রক্রিয়া টেবিলের স্লটগুলির বাইরে চলে যাওয়া বেশিরভাগ ক্ষেত্রে একটি সিস্টেমকে তার হাঁটুর কাছে নিয়ে আসবে, এমনকি যদি এটি সম্পূর্ণ কার্নেল আতঙ্কের কারণ না করে।
অস্টিন হেমেলগার্ন

4
@ অস্টিনহেমলগার্ন: এ কারণেই বুদ্ধিমান সিস্টেমগুলি সর্বশেষ 4 বা তার জন্য মূল আইডির প্রক্রিয়া সংরক্ষণ করে।
জোশুয়া

2
প্রক্রিয়াগুলি কেন "অলস" হয়ে যাবে? প্রতিটি কাঁটাচামচ প্রক্রিয়া আরও প্রক্রিয়া তৈরি অসীম পুনরাবৃত্তি হয়। সুতরাং এটি সিস্টেম কল ওভারহেড ( forkওভার-ওভার) এর অনেক সময় ব্যয় করে এবং তার বাকি সময়টি ফাংশন কলটি করে (বর্ধিতভাবে শেলের কল স্ট্যাকের প্রতিটি কলের জন্য আরও মেমরি ব্যবহার করে, সম্ভবত)।
mtraceur

4
@ এমট্রেচার: এটি কেবল তখনই ঘটে যখন কাঁটাচামচ ব্যর্থ হয়।
জোশুয়া

1
ওহ, আমি এটি আবার নিতে। আমি প্রশ্নের মাথার :(){ :& :; }; :পরিবর্তে আমার মাথায় (এই জাতীয় :) কিছুটা আলাদা কাঁটাচামচ প্রয়োগের যুক্তি মডেলিং করছিলাম । প্রদত্ত প্রত্নতাত্ত্বিকটির কার্যকর করার প্রবাহের মাধ্যমে আমি আসলে পুরোপুরি ভাবিনি।
mtraceur

9

নব্বইয়ের দশকে ফিরে এসে আমি ঘটনাক্রমে এগুলির একটি নিজের উপর প্রকাশ করি। আমি অজান্তেই একটি সি উত্স ফাইলে এক্সিকিউট বিট সেট করেছিলাম যাতে এতে কাঁটাচামচ () কমান্ড ছিল। আমি যখন এটি ডাবল-ক্লিক করেছি, সিএসএস চাইলে এডিটরটিতে এটি না খোলার চেয়ে এটি চালানোর চেষ্টা করেছিল।

তারপরেও, এটি সিস্টেমটি ক্র্যাশ করে নি। ইউনিক্স যথেষ্ট শক্তিশালী যে আপনার অ্যাকাউন্ট এবং / অথবা ওএসের একটি প্রক্রিয়া সীমা থাকবে। পরিবর্তে যা ঘটে তা হ'ল এটি অতি স্বাচ্ছন্দ্যজনক এবং কোনও প্রক্রিয়া শুরু করার জন্য যা কিছু প্রয়োজন তা ব্যর্থ হওয়ার সম্ভাবনা রয়েছে।

পর্দার আড়ালে যা ঘটছে তা হ'ল প্রক্রিয়া সারণী এমন প্রক্রিয়াগুলি পূরণ করে যা নতুন প্রক্রিয়া তৈরি করার চেষ্টা করছে। যদি তাদের মধ্যে একটি সমাপ্ত হয় (হয় প্রক্রিয়া সারণী ভরাটের কারণে কাঁটাচামচায় একটি ত্রুটি হওয়ার কারণে, বা হতাশ অপারেটর তাদের সিস্টেমে সততা পুনরুদ্ধার করার চেষ্টা করার কারণে), অন্য একটি প্রক্রিয়া আনন্দের সাথে পূরণ করার জন্য একটি নতুন কাঁটাচামচ করবে অকার্যকর, বাতিল.

"কাঁটাচামচ বোমা" মূলত আপনার প্রক্রিয়া সারণী পূর্ণ রাখার মিশনে একটি অনিচ্ছাকৃতভাবে স্ব-মেরামত প্রক্রিয়া। এটি বন্ধ করার একমাত্র উপায় হ'ল একসাথে তাদের সকলকে হত্যা করা।


1
তাদের একবারে হত্যা করা আপনার ভাবার চেয়ে সহজ - প্রথমে এগুলি সাইনস্টপ করুন।
স্কোর_উন্ডারে

2
@ স্কোর_উন্ডার - আমি আশা করি যে আমি যদি তাত্ক্ষণিকভাবে আমার নিকটতম হ্যারিস নাইটহাকের কাছে ছুটে না যাই তা দেখার জন্য সেখানে সমস্যাটি স্থির হয়েছে কিনা তা আপনি আমাকে ক্ষমা করবেন hope আমি ভাবছি ব্যর্থ কাঁটাচামচ থেকে মারা যাওয়ার আগে কেবল একটি পিআইডি এটিকে সিগন্যাল প্রেরণ করা হচ্ছে এবং এটির জন্য এটি নেওয়া একটি চ্যালেঞ্জ হতে পারে তবে আমার এটি চেষ্টা করে দেখতে হবে।
টেড

@ টেড কিল -9 -1 এখানে আপনার বন্ধু হতে পারে (একই ব্যবহারকারীর সাথে কাঁটা বোমা চালায়; মূলের সাথে নয়)।
Andreas Krey

@ আন্ড্রেয়াসক্রি - এই পতাকাটি পরিচিত বলে মনে হচ্ছে না, তাই আমি আমার 90 এর দশকের নাইটহাকের কাছে সন্দেহ করছি।
টেড

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