תוכנית שנכתבו גרוע או ביצוע גרוע יכול לעזוב תהליכי זומבי אורב בתוך המחשב לינוקס שלך. גלה כיצד זומבים נוצרים, וכיצד אתם יכולים סוף סוף להניח להם לנוח.
כיצד תהליך הברית עבודה על לינוקס
לינוקס, כמובן, יש לעקוב אחר כל היישומים דמונים שפועלת במחשב. אחת הדרכים היא עושה זאת היא על ידי שמירה על שולחן התהליך. זוהי רשימה של מבנים בזיכרון הקרנל. לכל תהליך רשומה ברשימה זו שמכילה כמה פרטים על זה.
אין הרבה בכל אחד מהמבנים שולחן התהליך. הם מחזיקים את מזהה תהליך , כמה פריטי נתונים אחרים, וכן מצביע לגוש בקרת תהליכים (PCB) עבור תהליך זה.
זהו PCB שמכיל את הפרטים הרבים לינוקס צריך להסתכל למעלה או להגדיר עבור כל תהליך. ה- PCB מתעדכן גם כתהליך נוצר, נתון זמן עיבוד, ולבסוף נהרס.
לינוקס PCB מכיל מעל 95 שדות.
זה מוגדר
כמבנה שנקרא
task_struct.h
, וזה נגמר מזמן 700 קווים. ה- PCB מכיל את סוגי המידע הבאים:
- מדינת תהליך : קובע מתוארים להלן.
- מספר תהליכים : מזהה הייחודי שלה בתוך מערכת ההפעלה.
- מונה התוכנית : כאשר תהליך זה ניתן בא גישה המעבדת, המערכת תשתמש בכתובת זו כדי למצוא את ההוראה הבאה של התהליך שאמורה להתבצע.
- אוגרי : רשימת רושם CPU בשימוש על ידי תהליך זה. הרשימה עשויה לכלול מצברים, רושם מדד, ומצביע מחסנית.
- רשימת פתח קובץ : קבצים הקשורים בתהליך זה.
- מידע תזמון CPU משמש כדי לקבוע באיזו תדירות, ובמשך כמה זמן, זמן עיבוד CPU מוענק תהליך זה:. העדיפות של התהליך, עצות תורי תזמון, תזמון ופרמטרים אחרים צריכות להיות מוקלטות PCB.
- מידע ניהול זיכרון : תהליך פרטים על הזיכרון הזה משתמש, כגון כתובות ההתחלה והסיום של זיכרון התהליך, ומצביעים אל דפי זיכרון.
- I / O מידע מצב : כל-או התקני פלט בשימוש על ידי תהליך.
"המדינה Process" יכול להיות כל אחד מהבאים:
- R: כתובת שרצה או תהליך Runnable. Running כלומר זה קבלת מחזורי CPU וביצוע. תהליך Runnable מוכן לרוץ ומחכה חריץ ה- CPU.
- S: תהליך השינה. התהליך מחכה פעולה כדי להשלים, כגון מבצע ב-או פלט, או עבור משאב להיות זמין.
- D: התהליך נמצא במצב שינה פסק. זה באמצעות קריאת המערכת חוסמת ולא יכול להמשיך עד שיחות מערכת השלימו. בניגוד למצב "שינה", תהליך במצב הזה לא יגיב אותות עד קריאת המערכת תושלם וביצוע חזר התהליך.
-
T:
התהליך הסתיים (הפסיק) משום שהוא קיבל את
SIGSTOPאוֹת. זה רק תגיב אל הSigkillאוֹSIGCONTאותות, אשר גם להרוג את התהליך או להורות לו להמשיך, בהתאמה. זה מה שקורה כשאתה להחליף מ קדמה (FG) ל רקע כללי (BG)משימות. -
Z:
תהליך זומבי. כאשר השלים תהליך, זה לא פשוט להיעלם. זה משחרר את כול זיכרון שהן נעזרות ומסיר עצמו מזיכרון, אבל הכניסה שלו בטבלת התהליך PCB להישאר. המדינה שלה מוגדרת
EXIT_ZOMBIE, תהליך האב שלו הוא הודיע (על ידיסיגצ'דאות) שהתהליך שהילד סיים.
במצב זומבי, תהליך ההורה קורא אחד
לַחֲכוֹת()
משפחות של פונקציות
כאשר תהליך הילד נוצר. לאחר מכן הוא מחכה לשינוי המדינה בתהליך הילד. האם תהליך הילד נעצר, נמשך, או נהרג על ידי אות? האם זה הסתיים על ידי ריצה דרך ההשלמה הטבעית של הקוד שלה?
אם שינוי המדינה הוא אחד שמשמעותו שתהליך הילד הפסיק לפעול, קוד היציאה שלו נקרא. לאחר מכן, ה- PCB של הילד נהרס והכניסה שלו בטבלת התהליך מוסרת. באופן אידיאלי, כל זה קורה בהרף עין, ותהליכים במצב זומבי לא קיימים במשך זמן רב.
קָשׁוּר: כיצד להפעיל ולשלוט תהליכי רקע על לינוקס
מה גורם לתהליכי זומבי על לינוקס?
תהליך הורה כתב גרוע עשוי שלא להתקשר
לַחֲכוֹת()
כאשר תהליך הילד נוצר. משמעות הדבר היא שום דבר לא צופה לשינויים המדינה בתהליך הילד, ואת
סיגצ'ד
האות יתעלם. לחלופין, אולי יישום נוסף משפיע על ביצוע תהליך האב, או עקב תכנות גרוע או כוונה זדונית.
עם זאת, אם תהליך האב אינו צופה לשינויים במצב בתהליך הילד, משק הבית הנכון של המערכת לא תתרחש. ה- PCB והכניסה בטבלת התהליך לא יוסרו כאשר תהליך הילד מסתיים. תוצאות אלה במצב זומבי אף פעם לא להסיר מן PCB.
זומבים עושים שימוש קצת זיכרון, אבל הם בדרך כלל לא מהווים בעיה. הכניסה בטבלת התהליך קטנה, אך עד שהיא שוחררה, מזהה התהליך לא ניתן לעשות בה שימוש חוזר. על מערכת הפעלה של 64 סיביות, זה לא סביר לגרום כל בעיות כי PCB הוא הרבה יותר גדול מאשר ערך הטבלה.
מספר עצום של זומבים יכול, ראוי להשפיע על כמות הזיכרון בחינם עבור תהליכים אחרים. אם יש לך כי זומבים רבים, אם כי, יש לך בעיה רצינית עם יישום האב או באג מערכת ההפעלה.
כיצד להסיר תהליכים זומבים
אתה לא יכול להרוג תהליך זומבי כי זה כבר מת. זה לא יגיב לכל אותות כי זה הוסר מהזיכרון - אין לאן לשלוח
Sigkill
אוֹת. אתה יכול לנסות לשלוח את
סיגצ'ד
האות לתהליך האב, אבל אם זה לא עובד כאשר תהליך הילד הסתיים, זה לא סביר לעבוד עכשיו, או.
הפתרון היחיד מהימן הוא להרוג את תהליך האב. כאשר הוא הסתיים, תהליכי הילד שלה הם בירושה על ידי
יַעֲלָן
תהליך, שהוא התהליך הראשון לרוץ במערכת לינוקס (מזהה התהליך שלו הוא 1).
ה
יַעֲלָן
תהליך מבצע באופן קבוע את הניקוי הדרוש של זומבים, כך להרוג אותם, אתה רק צריך להרוג את התהליך שיצר אותם. ה
חלק עליון
הפקודה היא דרך נוחה לראות אם יש לך כל זומבים.
הקלד את הדברים הבאים:
Top
מערכת זו יש 8 תהליכים זומבי. אָנוּ
רשימת אלה
באמצעות
נ.ב
פקודה
וצנרת אותו
eGREP.
. שוב, תהליכים זומבי יש דגל המדינה של "Z", ואתה בדרך כלל גם לראות "defunct".
הקלד את הדברים הבאים:
PS AUX EGREP "Z | Defunct"
תהליכי זומבי רשומים.
זוהי דרך neater לגלות את תעודות הזהות של זומבים מאשר גלילה הלוך ושוב דרך
חלק עליון
. אנו גם רואים כי יישום בשם "Badprg" הוליד את הזומבים האלה.
מזהה התהליך של זומבי הראשון הוא 7641, אבל אנחנו צריכים למצוא את מזהה התהליך של תהליך ההורה שלה. אנחנו יכולים לעשות זאת באמצעות
שוב. נשתמש באפשרות הפלט (
נ.ב
-
) לספר
נ.ב
כדי להציג רק את תעודת התהליך של ההורה, ולאחר מכן להעביר אותו עם
PPID =
דֶגֶל.
התהליך שאנו רוצים למצוא יפורסם על ידי שימוש
-
(תהליך) אפשרות, ולאחר מכן עובר בתהליך התהליך של זומבי.
לכן, אנו מקליד את הפקודה הבאה כדי לחפש את פרטי התהליך עבור תהליך 7641, אבל זה יהיה רק לדווח על מזהה של תהליך האב:
PS -O PPID = -P 7641
נאמר לנו מזהה תהליך האב הוא 7636. אנחנו יכולים עכשיו לחצות זה באמצעות
נ.ב
פעם נוספת.
אנחנו רואים את זה תואם את השם של תהליך ההורה מוקדם יותר. להרוג את התהליך ההורה, להשתמש באפשרות SIGKILL עם הפקודה להרוג כדלקמן:
להרוג -SIGKILL 7636
בהתאם הבעלים של תהליך ההורה, אולי גם אתה צריך להשתמש
sudo
.
זומבים הם לא מפחידים ...
... אלא אם כן הם כמו עדר גדול מסיבי. כמה הם לא משהו לדאוג ו אתחול מחדש פשוט יחסל אותם.
עם זאת, אם אתם מבחינים כי יישום או תהליך תמיד השרצה זומבים, זה משהו שאתה צריך להסתכל לתוך. ביותר זה סביר רק תכנית כתובה ברישול, ובמקרה, אולי יש גרסה מעודכנת שהמנקה כמו שצריך אחרי תהליכי הילד שלה.