مقدمه مفهومی درباره واژه در حوزه فناوری اطلاعات، اصطلاح ’’zombie’’ معمولاً برای توصیف موجودیتی در سیستم به کار می رود که به ظاهر بی فعالیت یا مرده است، اما همچنان در بخشی از حافظه، پردازش یا شبکه باقی مانده است. این واژه در ابتدا در سیستم عامل های یونیکس برای فرآیندهایی به کار رفت که اجرای آن ها پایان یافته اما اطلاعات وضعیت آن ها هنوز توسط سیستم نگهداری می شود. چنین فرآیندهایی به عنوان ’’فرآیندهای یتیم’’ یا zombie process شناخته می شوند. این مفهوم بعدها به حوزه های دیگر مانند شبکه، امنیت، توسعه وب و معماری سیستم نیز گسترش یافت. کاربرد واژه در برنامه نویسی یا زیرشاخه های فناوری اطلاعات در برنامه نویسی سطح سیستم، به ویژه در زبان هایی مانند C و C++ در محیط یونیکس یا لینوکس، زمانی که یک فرآیند فرزند اجرا را به پایان می رساند اما والد آن هنوز وضعیت خروج آن را دریافت نکرده، سیستم این فرآیند را به صورت یک zombie نگه می دارد. در توسعه وب یا نرم افزار، اصطلاح zombie برای مؤلفه هایی مانند سشن های منقضی شده، تردهای نیمه فعال یا اشیاء در حافظه که رفرنس فعالی ندارند نیز استفاده می شود. در امنیت سایبری، اصطلاح zombie به کامپیوترهایی اطلاق می شود که در کنترل botnet هستند بدون اینکه کاربر متوجه شود. مثال های واقعی و کاربردی در زندگی یا پروژه های IT فرض کنید یک اپلیکیشن چندپردازه در لینوکس دارید که تعدادی subprocess ایجاد می کند. اگر والد بدون دریافت اطلاعات وضعیت این subprocessها از طریق system callهایی مانند `wait()` یا `waitpid()` آن ها را رها کند، سیستم این فرآیندهای خاتمه یافته را به صورت zombie نگه می دارد. در نتیجه جدول فرآیندها (process table) به تدریج پر شده و موجب اشباع سیستم می شود. در امنیت، zombieهای شبکه معمولاً در کامپیوترهایی که توسط بدافزار آلوده شده اند ایجاد می شوند و در حملات DDoS استفاده می گردند. نقش واژه در توسعه نرم افزار یا معماری سیستم ها در طراحی معماری سیستم ها، آشنایی با پدیده zombie برای مدیریت صحیح حافظه، فرآیندها و منابع سیستم ضروری است. در معماری microservices، اگر یک سرویس ارتباط خود را از دست بدهد ولی همچنان در جدول های روتینگ یا مدیریت حافظه نگهداری شود، تبدیل به یک zombie service می شود. در توسعه کلاینت/سرور نیز کانکشن های zombie باعث اختلال در ارتباط می شوند و نیاز به تایم اوت یا مکانیسم heartbeat دارند. مدیریت فرآیندهای یتیم از وظایف اصلی سیستم عامل ها و برنامه نویسان سطح پایین محسوب می شود. شروع استفاده از این واژه در تاریخچه فناوری و تکامل آن در سال های مختلف استفاده از واژه zombie در علوم رایانه به دهه 1970 در سیستم عامل یونیکس بازمی گردد. آن زمان برنامه نویسان برای اشاره به فرآیندهایی که هنوز توسط والد پاک سازی نشده بودند، از این اصطلاح استعاری استفاده کردند. با گسترش سیستم عامل های شبه یونیکس، مفهوم zombie در ابزارهای مدیریتی مانند top، ps و kill وارد شد. در دهه های بعدی، با رشد حملات اینترنتی و تولد بات نت ها، اصطلاح zombie در امنیت سایبری نیز کاربرد یافت. در دنیای توسعه وب نیز از واژه zombie برای اشاره به سشن های منقضی شده یا کامپوننت هایی که در DOM باقی مانده اند ولی درواقع دیگر فعال نیستند استفاده شد. تفکیک آن از واژگان مشابه نباید zombie را با فرآیندهای ’’یتیم’’ (orphan process) اشتباه گرفت. orphan فرآیندی است که والد آن از بین رفته اما خود فرآیند فعال است و توسط init یا سیستم عامل مدیریت می شود. در حالی که zombie فرآیندی است که دیگر اجرا نمی شود اما هنوز در جدول فرآیندها باقی مانده است. همچنین نباید با اصطلاح هایی مانند dangling pointer یا memory leak نیز یکسان در نظر گرفته شود، اگرچه از نظر نشتی منابع ممکن است مشابه باشند. شیوه پیاده سازی واژه در زبان های برنامه نویسی مختلف در زبان C با استفاده از fork() و عدم استفاده از wait() می توان فرآیند zombie ایجاد کرد. در Java، Threadهایی که از کار افتاده اند اما به درستی terminate نشده اند، ممکن است باعث وضعیت هایی شبیه zombie شوند. در JavaScript، componentهایی که از DOM حذف نشده ولی دیگر در دسترس نیستند یا event listenerهایی که دیگر به جایی متصل نیستند، به عنوان zombie شناخته می شوند. در محیط های Node.js نیز سشن های نیمه فعال یا promiseهای بلاتکلیف مثال هایی از وضعیت zombie هستند. چالش ها یا سوءبرداشت های رایج در مورد آن یکی از باورهای اشتباه رایج، بی ضرر بودن فرآیندهای zombie است. اگرچه یک یا دو فرآیند ممکن است مشکلی ایجاد نکنند، اما باقی ماندن تعداد زیادی از آن ها در جدول فرآیند باعث اشباع منابع سیستم می شود. همچنین در برنامه نویسی شی گرا، گاهی اشیای بدون استفاده را zombie تلقی می کنند در حالی که این وضعیت تنها در صورت نبود garbage collection یا مدیریت نادرست رخ می دهد. اشتباه دیگر، تفسیر اشتباه zombie در امنیت است؛ بسیاری از کاربران تصور می کنند zombieها فعالانه حمله می کنند در حالی که معمولاً به صورت passive توسط سرور مرکزی هدایت می شوند. نتیجه گیری کاربردی برای استفاده در متون تخصصی و آموزشی درک صحیح اصطلاح zombie برای توسعه دهندگان سیستم، برنامه نویسان سطح پایین، مهندسان امنیت و معماران نرم افزار ضروری است. مدیریت صحیح فرآیندهای فرزند، پاک سازی منابع، مانیتورینگ سشن ها و استفاده از ابزارهای تشخیصی مانند lsof، ps و netstat کمک می کند تا از بروز پدیده zombie جلوگیری شود. در مستندسازی و آموزش نیز استفاده از این واژه به صورت صحیح و با تفکیک از واژه های مشابه اهمیت دارد.