מה זה תהליך זומבי על לינוקס?
אם אתה משתמש לינוקס, אתה יכול לראות תהליכים זומבי shambling סביב רשימת התהליכים שלך. אתה לא יכול להרוג תהליך זומבי כי זה כבר מת - כמו זומבי בפועל.
זומבים הם ביסודו של דבר חתיכות של תהליכים מתים שלא נוקו כראוי. תוכנית שיוצרת תהליכים זומבים אינה מתוכנתת כראוי - תוכניות לא אמורות לאפשר תהליכים זומבים להישאר בסביבה.
צילום: דניאל הוליסטר על פליקר (רמיקס)
מהו תהליך זומבי??
כדי להבין מה זה תהליך זומבי ומה גורם לתהליכים זומבים להופיע, תצטרך להבין קצת על איך תהליכים לעבוד על לינוקס.
כאשר תהליך מת על לינוקס, הוא לא מוסר מהזיכרון באופן מיידי - מתאר התהליך שלו נשאר בזיכרון (מתאר התהליך רק לוקח כמות זעירה של זיכרון). הסטטוס של התהליך הופך ל- EXIT_ZOMBIE וההורה של התהליך מקבל הודעה כי תהליך הילד שלו מת עם אות SIGCHLD. תהליך ההורה אמור לבצע את הקריאה () לחכות למערכת כדי לקרוא את מצב היציאה של התהליך המת ומידע אחר. הדבר מאפשר לתהליך ההורה לקבל מידע מתהליך המת. לאחר המתנה (), תהליך הזומבי מוסר לחלוטין מהזיכרון.
זה קורה בדרך כלל מהר מאוד, אז אתה לא תראה תהליכים זומבי הצטברות על המערכת שלך. עם זאת, אם תהליך האב אינו מתוכנת כראוי ואף פעם לא קורא לחכות (), הילדים זומבי שלו יישאר בזיכרון עד שהם ניקו.
כלי עזר כמו חלק עליון הפקודה, ואת ps הפקודה להציג תהליכים זומבי - -.
סכנות של תהליכי זומבי
זומבי תהליכים לא להשתמש בכל משאבי המערכת. (למעשה, כל אחד משתמש בכמות זעירה מאוד של זיכרון המערכת כדי לאחסן מתאר התהליך שלה.) עם זאת, כל תהליך זומבי שומרת על זיהוי התהליך שלה (PID). למערכות Linux יש מספר סופי של מזהי תהליך - 32767 כברירת מחדל במערכות של 32 סיביות. אם זומבים מצטברים בקצב מהיר מאוד - לדוגמה, אם תוכנת שרת מתוכנתת בצורה לא נכונה יוצרת תהליכים זומביים תחת עומס - כל מאגר ה- PIDs הזמין יהיה בסופו של דבר מוקצה לתהליכים זומביים, ובכך למנוע הפעלה של תהליכים אחרים.
עם זאת, כמה תהליכים זומבי מסתובבים אין בעיה - למרות שהם עושים להצביע על באג עם תהליך ההורה שלהם על המערכת.
איך להיפטר של זומבי תהליכים
אתה לא יכול להרוג תהליכים זומבי כפי שאתה יכול להרוג תהליכים נורמליים עם האות SIGKILL - תהליכים זומבי כבר מתים. זכור כי אתה לא צריך להיפטר תהליכי זומבי, אלא אם כן יש לך כמות גדולה על המערכת שלך - כמה זומבים הם מזיקים. עם זאת, יש כמה דרכים אתה יכול להיפטר תהליכי זומבי.
אחת הדרכים היא לשלוח את האות SIGCHLD לתהליך ההורה. אות זה אומר את תהליך ההורה לבצע את השיחה () שיחה המערכת ולנקות את הילדים זומבי שלה. שלח את האות עם להרוג הפקודה, החלפת pid בפקודה שבהמשך עם PID של תהליך האב:
להרוג - sIGCHLD pid
עם זאת, אם תהליך האב אינו מתוכנת כראוי ומתעלם אותות SIGCHLD, זה לא יעזור. יהיה עליך להרוג או לסגור את תהליך ההורה של זומבים. כאשר התהליך שיצר את זומבים מסתיים, init יורש את התהליכים זומבי והופך ההורה החדש שלהם. (init הוא התהליך הראשון התחיל על לינוקס ב אתחול מוקצה PID 1.) init מעת לעת מבצעת את המתנה () מערכת להתקשר לנקות את הילדים זומבי שלה, אז init יעשה עבודה קצרה של זומבים. ניתן להפעיל מחדש את תהליך ההורה לאחר סגירתו.
אם תהליך ההורה ממשיך ליצור זומבים, זה צריך להיות קבוע כך שהוא קורא כראוי לחכות () כדי לקצור את הילדים זומבי. דווח על דוח באגים אם תוכנית במערכת שלך ממשיכה ליצור זומבים.