نحوه حذف تمامی زامبی (Zombie) ها بدون ریستارت!

این بخش مربوط به مطالب و دست نوشته های کوچک آموزشی اعضا میباشد

نحوه حذف تمامی زامبی (Zombie) ها بدون ریستارت!

نوشتهاز NabiKAZ » دو شنبه فروردین 30, 89 2:20 pm

سلام،

اینکه دقیقاً زامبی ها چین و چیکار میکنند رو شما بگید! من فقط میدونم چیزای خوبی نیستند :D ظاهراً یه سری پروسه های تاریخ گذشته و بدردنخور که فقط حافظه رو اشغال میکنند هستند... (آره؟!)

به هر حال...

امروز دیدم حدود 8 تا زامبی دارم، به فکر افتادم چطور میشه اونها رو از بین برد.
وقتی روی IRC پرسیدم کلی متلک بارم کردند:
کد: گزینش همه
(14:28:24) Nabi: how can I remove zombie?!
(14:28:40) [R]: Nabi: reboot
(14:29:04) Nabi: [R]: and other way?!
(14:29:10) poutine: Nabi, shoot them in the head, decapitate them
(14:29:31) [R]: Nabi: you could ignore it
(14:29:34) eremite_: Destroy the brain.
(14:29:36) Anss|: kill -9  does not help ?
(14:30:27) frogzoo: Nabi: you have to perform an exorcism
(14:31:43) Nabi: off :>

(البته نمیدونم شاید هم اینها اصطلاحات طبیعی بودند که سواد من کشش نداشت! ;) )


ظاهراً راهی جز ریست کردن سیستم نبود... ولی بعد خودم یه سرچ ساده کرده و یه کد عروسک(!) برای از بین بردن اونها، پیدا کردم که میزارم اینجا:

کد: گزینش همه
#! /bin/bash
#
# Zombie processes killing script. Must be run under root.

case "$1" in
--admin)
        stat=`ps ax | awk '{print $1}' | grep -v "PID" | xargs -n 1 ps lOp | grep -v "UID" | awk '{print"pid: "$3" *** parent_pid: "$4" *** status: "$10" *** process: "$13}' | grep ": Z"`

        if ((${#stat} > 0));then
            echo zombie processes found:
            echo .
            ps ax | awk '{print $1}' | grep -v "PID" | xargs -n 1 ps lOp | grep -v "UID" | awk '{print"pid: "$3" *** parent_pid: "$4" *** status: "$10" *** process: "$13}' | grep ": Z"
            echo -n "Kill zombies? [y/n]: "
            read keyb
            if [ $keyb == 'y' ];then
                echo killing zombies..
                ps ax | awk '{print $1}' | grep -v "PID" | xargs -n 1 ps lOp | grep -v "UID" | awk '{print$4" status:"$10}' | grep "status:Z" | awk '{print $1}' | xargs -n 1 kill -9
            fi
        else
            echo no zombies found!
        fi
;;
--cron)
        stat=`ps ax | awk '{print $1}' | grep -v "PID" | xargs -n 1 ps lOp | grep -v "UID" | awk '{print"pid: "$3" *** parent_pid: "$4" *** status: "$10" *** process: "$13}' | grep ": Z"`
        if ((${#stat} > 0));then
        ps ax | awk '{print $1}' | grep -v "PID" | xargs -n 1 ps lOp | grep -v "UID" | awk '{print$4" status:"$10}' | grep "status:Z" | awk '{print $1}' | xargs -n 1 kill -9
        echo `date`": killed some zombie proceses!" >> /var/log/zombies.log
        fi
;;
*)      echo 'usage: zombies {--cron|--admin}'
;;
esac
exit 0


روش استفاده هم بسیار سادست.
کد بالا رو تحت فایل zombies ذخیره و بدین صورت استفاده کنید:

کد: گزینش همه
./zombies --admin


اما اگر خواستید که اون رو توی cron jobs قرار بدید تا به صورت خودکار در فواصل زمانی خاص عملیات رو انجام بده؛ بدین صورت استفاده کنید:
کد: گزینش همه
./zombies --cron

نهایتاً گزارش کار در فایل /var/log/zombies.log ذخیره میشه.


منبع: http://sunoano.name/ws/public_xhtml/deb ... _processes

زامبی چیست: http://en.wikipedia.org/wiki/Zombie_process


با تشکر
نبی
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

برگشت به دست نوشته های اعضا

اکنون هست

;کسانی که اکنون در این تالار هستند: کاربری نام ننوشته است کاربر و 2 میهمان

cron