Zombie
Introduction
- child process 已經結束,但他的 parent process 沒有 wait 它 🥲
- 我們必須持續儲存 minimal information (PCB) 直到 parent process 讀取
Why we need zombie?
- 我們必須讓 parent process 能知道這個 pid 代表的 child process 已經 terminated ,否則如果同個 pid 被分給其他 process,parent process 會不知道而把它當作自己的 child process (喂!抱錯孩子了啊!)
- 又或是 parent process 可能會以為在 wait 他的 child process,實際上這是拿著同個 pid 的另一個 process
Problem with zombie
- Zombie process 會佔用 process IDs,然後 process ID 是有限的資源,太多 zombie process 可能會造成我們沒辦法 fork 新的 child
Create Background Process without Making Zombies
if (pid=fork() == 0) {
if (pid=fork() == 0) {
... // grandchild
}
else
exit(0);
}
else
exit(0);- 這樣 grandchildren 的 parent process 就會變成 Init (PID 1),因為 child process terminates 了
- Init 會自動 wait 他的 child
Orphan
那麼如果在 child process 結束前 parent process 就 terminate 了呢?那這樣這個 child process 就會變成 orphan,並且 Init (PID 1) 會變成此 process 的 parent process