20Aug

מה זה "תהליך זומבי" על לינוקס?

אם אתה משתמש לינוקס, אתה יכול לראות תהליכים זומבי shambling סביב רשימת התהליכים שלך.אתה לא יכול להרוג תהליך זומבי כי זה כבר מת - כמו זומבי בפועל.

זומבים הם בעצם החלקים הנותרים של תהליכים מתים שלא נוקו כראוי.תוכנית שיוצרת תהליכים זומבים אינה מתוכנתת כראוי - תוכניות לא אמורות לאפשר תהליכים זומבים להישאר בסביבה.

תמונה: דניאל Hollister על Flickr( Remixed)

מהו תהליך זומבי?

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

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

זה קורה בדרך כלל מהר מאוד, אז אתה לא תראה תהליכים זומבי הצטברות על המערכת שלך.עם זאת, אם תהליך האב אינו מתוכנת כראוי ואף פעם לא קורא לחכות() , הילדים הזומבים שלו יישאר בזיכרון עד שהם ינקה.

כלי עזר כמו מערכת GNOME צג, הדף הפקודה, ואת PS הפקודה להציג תהליכים זומבי.

סכנות של תהליכים זומבי

זומבי תהליכים לא להשתמש בכל משאבי המערכת.(למעשה, כל אחד משתמש בכמות זעירה מאוד של זיכרון המערכת כדי לאחסן מתאר התהליך שלה.) עם זאת, כל תהליך זומבי שומרת על זיהוי התהליך שלה( PID).למערכות Linux יש מספר סופי של מזהי תהליך - 32767 כברירת מחדל במערכות של 32 סיביות.אם זומבים מצטברים בקצב מהיר מאוד - לדוגמה, אם תוכנת השרתים המתוכנת בצורה לא נכונה יוצרת תהליכים זומבים תחת עומס - כל מאגר ה- PIDs הזמין יהיה בסופו של דבר מוקצה לתהליכים זומביים, ובכך למנוע הפעלה של תהליכים אחרים.

עם זאת, כמה תהליכים זומבי מסתובבים אין בעיה - למרות שהם עושים להצביע על באג עם תהליך ההורה שלהם על המערכת שלך.

איך להיפטר של תהליכים זומבי

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

דרך אחת היא על ידי שליחת אות SIGCHLD לתהליך ההורה.אות זה אומר את תהליך ההורה לבצע את השיחה() שיחה המערכת ולנקות את הילדים זומבי שלה.שלח את האות עם הפקודה להרוג , להחליף pID בפקודה להלן עם תהליך ההורה של PID:

להרוג- sigchld pid

עם זאת, אם תהליך האב אינו מתוכנת כראוי, והוא מתעלם אותות SIGCHLD, זה זכהלא תעזור.יהיה עליך להרוג או לסגור את תהליך ההורה של זומבים.כאשר התהליך שיצר את זומבים מסתיים, init יורש את התהליכים זומבי והופך ההורה החדש שלהם.(init הוא התהליך הראשון שהתחיל ב- Linux באתחול והוא מוקצה PID 1.) init מעת לעת מבצעת את השיחה() שיחה המערכת כדי לנקות את הילדים זומבי שלה, אז init יעשה עבודה קצרה של זומבים.ניתן להפעיל מחדש את תהליך ההורה לאחר סגירתו.

אם תהליך ההורה ממשיך ליצור זומבים, זה צריך להיות קבוע כך שהוא קורא כראוי לחכות() כדי לקצור את הילדים זומבי שלה.קובץ דווח על באג אם תוכנית על המערכת שלך שומר על יצירת זומבים.