במערכת עם מעבד יחיד רק תהליך אחד יכול לרוץ בכל רגע נתון (או המערכת הפעלה). התהליכים האחרים יכולים לחכות למשהו (IO) או שהם "רוצים לרוץ".
הsleeping הם בד"כ התהליכים שממתינים למשהו.
לכל תהליך יש הורה שהוא יוצר תהליך חדש, וזה יוצר עץ תהליכים שהתהליך הראשון הוא הinit שנוצר לאחר עליית גרעין מערכת ההפעלה. להליך אב שיצר תהליך חדש יכול לחכות לו, ולאחר מכן לקבל את מצב היציאה שלו. דבר זה נעשה ע"י קראית המערכת wait. כאשר תהילך הבן יוצא, וההורה שלו עדיין לא עשה wait, אז תהליך הבן נקרא זומבי, כי הוא קיים רק בשביל להחזיר ערך לתהליך האב שלו. אם תהליך האב יוצא כאשר יש לו תהליך בן זומבי, אז תהליך הבן משתייך לinit ויוצא. כך, אם אתה רוצה לחסל תהליך זומבי, יש לחסל את תהליך האב שלו.
דוגמה בC:
קוד: |
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
int status;
if (fork() > 0)
{
//parent
printf("I'm going to sleep\n");
sleep(10);
wait(&status);
printf("status: %d",WEXITSTATUS(status));
} else {
//child
printf("I'm a child!, Bye\n");
return 89;
}
return 0;
}
|
בזמן הריצה יש לך עשר שניות בשביל לעשות top -b|less, ולראות שם זומבי.