فرایند های زامبی در سیستم عامل لینوکس

خانه » نوشته ها » فرایند های زامبی در سیستم عامل لینوکس

فرایند های زامبی در سیستم عامل لینوکس

مقدمه

یک فرآیند زامبی فرایندی است که اجرای آن تمام شده است اما هنوز در جدول پردازش یک ورودی دارد. فرایندهای زامبی معمولا برای پروسه های فرزند رخ می دهد، زیرا پرونده والد هنوز نیاز به خواندن وضعیت خروج فرزند خود دارد.هنگامی که این کار با استفاده از سیستم انتظار صبر کردن انجام می شود، فرآیند زامبی از جدول پردازش حذف می شود. این اتفاق سبب ورود مجدد پردازش در حافظه می گردد.

یک نمودار که نشان دهنده ایجاد و خاتمه یک فرآیند زامبی است به شرح زیر است:

نقاط برجسته از فرآیندهای زامبی

برخی از نکات برجسته مربوط به فرایندهای زامبی عبارتند از:

تمام حافظه و منابع اختصاص داده شده به یک فرآیند، زمانی که فرآیند با استفاده از تابع سیستمی ()exit  پایان می یابد، اختصاص می یابد. اما ورود فرایند در جدول پردازش هنوز در دسترس است. این روند در حال حاضر یک روند زامبی است. وضعیت خروج فرآیند زامبی زامبی را می توان با فرایند پدر و مادر با استفاده از تابع سیستمی ()wait خواند. پس از آن، فرآیند زامبی از سیستم حذف می شود.

سپس شناسه پردازش و ورودی روند پردازش زامبی را می توان دوباره استفاده کرد.

اگر فرآیند پدر و مادر از تابع سیستمی  wait() استفاده نکند، پراسس زامبی در جدول پردازش قرار نمیگیرد و این باعث نشت منابع می شود.

اگر فرآیند پدر و مادر دیگر اجرا نمی شود، حضور یک فرایند زامبی نشان دهنده یک اشکال سیستم عامل است. اگر چند فرآیند زامبی وجود داشته باشد این مسئله جدی نیست، اما در بارهای سنگین تر این می تواند مسائلی از قبیل عدم استفاده از نوشته های جدول پردازش را برای سیستم ایجاد کند.

فرآیندهای زامبی را می توان از طریق ارسال سیگنال SIGCHLD به والدین، با استفاده از دستور kill، از سیستم حذف کرد. اگر فرآیند زامبی هنوز توسط فرایند والد حذف نشده باشدو یا  اگر فرآیند پدر و مادر حذف شده باشند، فرایند زامبی (فرزند) قطع می گردد.

خطرات فرآیندهای زامبی

فرآیندهای زامبی از منابع سیستم استفاده نمی کنند، اما آنها شناسه روند خود را حفظ می کنند. اگر بسیاری از فرآیندهای زامبی وجود داشته باشد تمام شناسه های فرایند در دسترس توسط آنها انحصار می شوند. این اتفاق باعث می شود فرآیندها اجرا نشوند، زیرا هیچ شناسه پردازشی موجود نیست.

اگر فرآیندهای والدین آنها دیگر اجرا نشوند، حضور فرآیندهای زامبی همچنین نشان دهنده یک اشکال سیستم عامل است. این یک مشکل جدی نیست اگر چند فرآیند زامبی وجود دارد اما تحت بارهای سنگین تر، این می تواند مسائل برای سیستم ایجاد کند.

کشتن فرآیندهای زامبی

فرآیندهای زامبی را می توان با ارسال سیگنال SIGCHLD به والدین، با استفاده از دستور kill کشت. این سیگنال فرآیند پدر و مادر را برای پاک کردن فرایند زامبی با استفاده از تابع سیستمی  wait () اطلاع می دهد.این سیگنال که با دستور kill ارسال می شود به شرح زیر است:

Copy to Clipboard

در فرمان بالا، pid یک شناسه پردازش فرآیند پدر و مادر است.

توسط | ۱۳۹۸-۵-۵ ۰۶:۰۷:۵۲ +۰۰:۰۰ خرداد ۲۶ام, ۱۳۹۸|امنیت, لینوکس|بدون ديدگاه

درباره نویسنده:

ساکن شیراز و علاقه مند به یادگیری و اشتراک مطالب هستم. دارای مدرک کارشناسی ارشد از دانشگاه شیراز سرگرمی: خواندن کتاب، گوش دادن به پادکست و ورزش رو در اوقات فراغت انتخاب می کنم.

ثبت ديدگاه