خوانده شده 4 دقیقه ارسال شده در
زمانی که فرآیند به پایان رسید، اما فرآیند آن به پایان رسید. ممکن است همه چیز همچنان در جدول فرآیند ختم شود.
در حالت ایدهآل، چنین فرآیندهایی باید پس از پایان اجرا از جدول پردازش حذف شوند. 19659006] چنین فرآیندهای بیکار عمدتاً در فرآیندهای فرزند مشاهده می شوند. صبر کنید ().
پس از انجام این کار، فرآیند زامبی حذف میشود.
وضعیت یک فرآیند زامبی چگونه کار می کند
پس وضعیت یک فرآیند زامبی چگونه کار می کند؟ فرآیند فرزند.
سپس منتظر تغییر در فرآیند فرزند حالت میماند.
در صورت تغییر حالت که فرآیند فرزند متوقف شد، کد وضعیت خروج آن خوانده میشود.
پس از آن، PCB ( بلوک کنترل فرآیند) فرآیند فرزند از بین میرود و رکورد پاک میشود.
این خیلی سریع اتفاق میافتد و فرآیند زامبی کوتاهمدت است. عبارتند از:
تمام حافظه سیستم و سایر منابع تخصیص داده شده به فرآیند زامبی هنگامی که با استفاده از خروجی فراخوانی سیستم () خاتمه می یابد، تخصیص داده می شود
اما ورودی آن در جدول در دسترس باقی می ماند. در حال اجرا، وجود یک فرآیند زامبی به معنای خطا در سیستم عامل است. [19659006] اگر فرآیندهای زامبی کم باشد، ممکن است مشکلات جدی ایجاد نکند. فرآیندهای بخش بعدی این مقاله.
فرآیند والد وضعیت خروج از فرآیند زامبی را با استفاده از تابع انتظار () می خواند.
سپس فرآیند زامبی از سیستم حذف می شود.
پس از حذف، ورودی جدول فرآیند و شناسه فرآیند را می توان مجددا استفاده کرد
اگر تابع انتظار () توسط فرآیند والد استفاده نشود، زامبی در جدول پردازش باقی می ماند. یک سیگنال SIGCHLD به فرآیند والد با دستور kill، میتوانید فرآیند زامبی را از سیستم حذف کنید.
آیا فرآیندهای زامبی خطرناک هستند؟
] فرآیندهای زامبی از حافظه کمی استفاده می کنند، اما معمولاً خطرناک نیستند.
ورودی جدول پردازش کوچک است، اما تا زمانی که فرآیند زامبی آزاد نشود، نمی توانید از شناسه فرآیند استفاده کنید.
در سیستم عامل 64 بیتی، این مشکلی ایجاد نخواهد کرد زیرا PCB بزرگتر از ورودی جدول فرآیند است. یک مشکل جدی با وجود یک اشکال در سیستم عامل یا برنامه والد است.
در این مورد، شناسه های فرآیند باقی مانده در انحصار زامبی ها هستند. ] نحوه یافتن و کشتن زامبی ها -روندها
برای کشتن یک فرآیند زامبی، ابتدا آن را پیدا کنید
برای شناسایی فرآیندهای زامبی از دستورات زیر استفاده کنید. s aux | egrep "Z | Defunct"
Z استفاده شده در ستون STAT و / یا [defunct] استفاده شده در آخرین ستون خروجی، یک فرآیند زامبی را شناسایی می کند.
در واقع، شما نمی توانید فرآیندهای زامبی را از بین ببرید، همانطور که قبلاً انجام شده اند. مرده
تنها کاری که میتوانید انجام دهید این است که به فرآیند والد آن اطلاع دهید تا بتواند دوباره برای خواندن وضعیت فرآیند فرزند، که اکنون به یک فرآیند زامبی تبدیل شده است، تلاش کند و در نهایت فرآیند مرده از فرآیندهای جدول حذف شود.
برای پیدا کردن شناسه فرآیند والد از دستور زیر استفاده کنید. $ kill -s SIGCHLD <Родительский PID>.
اگر به حذف فرآیند زامبی از جدول فرآیند کمکی نمی کند، باید فرآیند والد آن را مجدداً راه اندازی کنید یا آن را بکشید.
برای از بین بردن فرآیند زامبی والد، از موارد زیر استفاده کنید. کد
$ kill - 9 <Родительский PID>
یادداشت جانبی: پس از کشتن فرآیند والد، فرآیندهای فرزند آن نیز آسیب خواهند دید. بنابراین، یک بررسی سریع و مضاعف توصیه میشود.
این به شما کمک میکند در سمت امن باشید.
درعوض، میتوان فرض کرد که تعداد کمی از فرآیندهای زامبی از حافظه یا منابع سیستم زیادی استفاده نمیکنند. تعمیر و نگهداری.
همچنین به طور مختصر به وضعیتهای فرآیند و نحوه عملکرد آن در مورد وضعیت فرآیند زامبی پرداختیم.
بنابراین، نتیجهگیری: زامبیها اگر به موقع تمیز و نگهداری شوند خطرناک نیستند. بودن مفید بود و به سوالات شما در مورد فرآیندهای زامبی در لینوکس پاسخ داد.