ליל כל הקדושים בלינוקס: כיצד להרוג תהליכי זומבים

חותמת ליל כל הקדושים

יום המתים מגיע ובגלל זה אנחנו רוצים לעשות את ההדרכה הקטנה הזו מ- LxA כדי לדבר על תהליכי זומבים ואיך נוכל להרוג אותם. הדבר הראשון שיש לומר הוא מהו תהליך הזומבי, וזה שכידוע, ליבת לינוקס כוללת תת-מערכת לניהול התהליכים ועובדת עם מתזמן ליצור, לשנות את העדיפות, לשלוח או להסיר את זרימת עיבוד המעבד ו להרוג תהליכים. ובכן, חלק זה של הגרעין, כמו שאר המערכות דומות ליוניקס, מבחין בין מצבים שונים של תהליכים ...

כדי שנוכל למצוא זאת תהליך זה יכול להיות במצב שינה (S), כלומר ישן. כמו כן תהליכים במצב פועל (R) שהם אלה שרצים או פועלים כרגע, תהליכים הממתינים (D) אשר הופסקו להמתין להשתתפות, Gestpt (T) או מושעה, וגם הזומבים (Z) או נפטרים. תהליך זומבי או מת הוא כזה שכבר הסתיים בהצלחה, אך יש לו משאבי מערכת מסוימים שנחטפו מאחר ולינוקס עדיין שומרת אותו בטבלת התהליכים. אתה כבר יודע שכאשר תהליך מסתיים, הוא לא צריך להישאר במצב זה, אלא הוא מסתיים והגרעין משחרר את המשאבים כך שתהליכים אחרים יוכלו להשתמש בהם, בעצם הוא משחרר את ה- RAM הכבוש ...

ובכן, מכיוון שלא מעניין לקבל תהליכי זומבים מסוג זה, למרות שהם אינם תכופים כל כך, אנו יכולים לחפש ולהעלים אותם כפי שצוין כאן. הדבר הראשון הוא למצוא אם ישנם תהליכי זומבים בהפצה שלנו ולשם כך אנו יכולים לעזור לעצמנו כלים כמו top או like ps. לדוגמא, אחת משתי האפשרויות הללו:

ps -el | grep 'Z'

ps aux | grep defunct

וברגע שנגלה, אנחנו יכולים הרוג אותו ישירות עם:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

אם כי אלטרנטיבה אחרת היא למצוא את תהליכי ההורה, מאז ל להרוג תהליך זומבי עליכם להרוג את תהליכי ההורה המקיימים אותו, כפי שאולי הסקתם:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

תצטרך להחליף על ידי המזהה של תהליך הזומבי שמצאת וכדי להרוג אותו עם הרג, השתמש בתעודת הזהות של תהליך ההורה המחליף בדוגמה, ברור.


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי על הנתונים: AB Internet Networks 2008 SL
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   עשו כדורים דיג'ו

    אתר טוב!
    הם תמיד מחלצים אותנו מהצרות.

    איפה אומר:
    למרות שחלופה נוספת היא למצוא את תהליכי האב, מכיוון שכדי להרוג תהליך זומבים אתה צריך להרוג את תהליכי האב התומכים בו, כפי שאולי הסקתם:

    1 | ps -eo pid, ppid | grep
    2|
    3 | להרוג -9

    תצטרך להחליף את המזהה של תהליך הזומבים שמצאת וכדי להרוג אותו עם הרג, השתמש במזהה של תהליך האב המחליף בדוגמה, כמובן.

    אתה יכול להוסיף את הסקריפט:

    $cat killppid.sh
    #! / bin / bash
    kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')

    כמובן, זו לא משימה שמשתמש רגיל מבצע כל הזמן.
    זה יהיה שימושי רק עבור המנהל, אבל זה מסוכן להפעיל את זה בתור root, כי זה יכול להרוג כל תהליך במערכת.

    באדם להרוג יש את ההערה הזו:

    הערות למעטפת שלך (מתורגמן שורת הפקודה) עשויה להיות פקודת הרג מובנית. אתה יכול
    צריך להפעיל את הפקודה המתוארת כאן בתור / bin / kill כדי לפתור את הקונפליקט.

    לבש יש את הפקודה הזו, זה החלק של האדם לבסס עליו:

    להרוג [-s sigspec | -n signum | -sigspec] [pid | מפרט עבודה]...
    kill -l | -L [sigspec | exit_status]
    שלח את האות בשם sigspec או signum לתהליכים שנקראו לפי pid או job
    מפרט. sigspec הוא שם אות לא תלוי רישיות כגון SIGKILL (עם או
    ללא קידומת SIG) או מספר אות; סימן הוא מספר אות. אם
    sigspec אינו קיים, אז ההנחה של SIGTERM. ארגומנט של -l מפרט את
    שמות האותות. אם סופקו טיעונים כלשהם כאשר -l ניתן, שמות ה-
    האותות המתאימים לארגומנטים מופיעים, ומצב ההחזרה הוא 0.
    הארגומנט exit_status ל-l הוא מספר המציין מספר אות או
    מצב היציאה של תהליך שהסתיים על ידי אות. אפשרות -L שווה ערך
    השאיל ל-ל. kill מחזיר אמת אם לפחות אות אחד נשלח בהצלחה, או
    false אם מתרחשת שגיאה או נתקלת באפשרות לא חוקית.

    בהתחלה הם מסבירים איך bash מגן על התהליכים, כדי למנוע כמה בעיות, אבל לא ברור לי איך אני יכול לעשות סקריפט בטוח שיפעל כ-root.
    הדבר היחיד שאני יכול לחשוב עליו הוא להגן עליו כך:

    $cat killppid.sh
    #! / bin / bash
    אם [$ USER == "שורש"]
    אז אקו אל תפעיל 0 $ כשורש !!! זה מסוכן!
    יציאה
    fi

    kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')

    $

    השתמש בהרג של bash, לא / bin / kill

    איך אתה יכול לראות שאני לא בקיא ב-bash.
    האם אתה יודע איך לכתוב סקריפט מאובטח שפועל כמשתמש בתהליך הילד, גם אם הוא פועל כ-root?
    משהו שווה ערך למה שייעשה באופן ידני כמו זה:

    $ סו;
    $ kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')