প্রক্রিয়া সারণী থেকে একটি জম্বি প্রক্রিয়া সরান


8

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

আমি কীভাবে তা করতে পারি?

এবং হ্যাঁ, আমি এই জিনিসগুলির বেশিরভাগটি পড়েছি:

একটি জম্বি প্রক্রিয়া ইতিমধ্যে মারা গেছে, সুতরাং এটি হত্যা করা যায় না।

অথবা

আপনার কেবল আপনার সিস্টেমটি পুনরায় বুট করা উচিত

এবং

বোকচন্দর প্রক্রিয়াগুলি কোনও সংস্থান ব্যবহার করে না, আপনার তাদের উচিত let

দুর্ভাগ্যক্রমে, প্রচুর প্রোগ্রাম প্রসেস টেবিলটি পরীক্ষা করে দেখুন যে কোনও ইনস্ট্যান্স ইতিমধ্যে চলছে কিনা, এবং প্রসেস টেবিলে কোনও এন্ট্রি থাকলে নতুন একটি শুরু করতে অস্বীকার করবে।

এবং প্রতিবার আমার এসএসএইচএফএস সংযোগটি ছড়িয়ে পড়ার সাথে সাথে পুনরায় বুট করা, এর সাথে সাব্লাইম নেওয়া, একধরনের নির্বোধ।


7
... শটগান দিয়ে ;)
নাথান সি

+1, কারণ আমি মূলটির দিকে চেয়েছিলাম এবং "
বুনো

উত্তর:


16

শুধুমাত্র উপায় একটি বোকচন্দর পরিত্রাণ পেতে তার পিতা বা মাতা করা হয় wait(), তাই এটি তার প্রস্থান অবস্থা প্রতিবেদন করতে পারেন। আপনি SIGCHLDপিতামাতার কাছে প্রেরণ করে, পেরেন্টকে সঠিকভাবে লেখা আছে তা ধরে নিয়ে এটি করতে পারেন।

আপনি zombies থাকে তাহলে এটি সাধারণত পিতা বা মাতা হয় মানে না সঠিকভাবে লিখিত (কারণ সন্তান ইতিমধ্যে পাঠানো SIGCHLD, তার পিতা বা মাতা যখন এটি মারা যান এবং একটি বোকচন্দর ওঠে) যাতে পরবর্তী ধাপে পিতা বা মাতা বধ হয়।
একটি বিকল্প pstree( -pবিকল্প সহ) আপনাকে আপনার জম্বিগুলির বংশ প্রদর্শন করতে পারে যাতে আপনি জানেন যে কোন প্রক্রিয়াটি পিতামাতার।
পিতামাতার মৃত্যুর পরে জম্বিটি গ্রহণ করবে init, যা সর্বদা wait()বাচ্চাদের মরার জন্য প্রস্তুত থাকে এবং আনন্দের সাথে গ্রহণ করা সমস্ত জম্বি হত্যা করে।

অভিভাবক প্রক্রিয়াটি যদি আসলে init(পিআইডি 1) হয় তবে আপনি এমন পরিস্থিতিতে রয়েছেন যা কখনই ঘটবে না। আপনি পাঠানোর চেষ্টা করতে পারেন SIGCHLDথেকে init, কিন্তু আপনি সত্যিই যে যা করতে হবে উচিত নয়, এবং যে যদি আপনার একমাত্র আশ্রয় কাজ করে না কারণ আপনার সিস্টেমের পুনরায় বুট হয় initনষ্ট হয়ে গেছে এবং তার কাজ করছে না।

(এগুলি হ'ল "শটগান" বিকল্প)


আপনি যদি পিতামাতার প্রক্রিয়াটি হত্যার বিষয়টি এড়াতে চান তবে আমার চেয়ে আরও কিছু সৃজনশীল লোকেরা এই বিকল্পটি নিয়ে এসেছেন:

  1. জম্বি এবং পিতামাতার প্রক্রিয়াগুলির পিআইডিএস নির্ধারণ করুন
    (উদাহরণস্বরূপ ধরা যাক যে জম্বিটি পিআইডি 3101 এবং প্যারেন্টটি পিআইডি 3100)
  2. আগুন gdbএবং attachপিতামাতাকে:
    attach 3100
  3. waitpidজম্বি জন্য কল করুন :
    call waitpid(3101,0,0)
  4. অভিভাবক ( detach) থেকে আলাদা করুন এবং ডিবাগার থেকে প্রস্থান করুন।

(এটি একটি সূক্ষ্ম সুরযুক্ত স্নাইপার রাইফেল।)


1
হুঁ, দুর্দান্ত উত্তর। "মোসিন" রাইফেলটি ঠিক সেখানে।
ড্যানিলা লাডনার

1
@ ড্যানিলাল্যাডনার আমি আশা করি আমি কৃতিত্ব নিতে পারি, তবে যতক্ষণ না আমি স্ক্রিট বলতে "ডামি প্রসেসের একটি শিশু হিসাবে জম্বি সংযুক্তি" এর অর্থ কী তা আমার কাছে কখনও ঘটেনি, তা দেখার জন্য একটু গুগল হান্টে গিয়েছি waitpid()। আমি একটি ভয়ানক প্রাক্তন প্রোগ্রামার ...
voretaq7

call waitpidআমার জন্য কখনই
ফেরান

0

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

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