第三章程式設計題
阿新 • • 發佈:2022-03-06
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
3.12
1.殭屍程序是什麼
每一個程序都有一個PCB(程序控制塊),其中包含程序執行的狀態等一系列資訊。
當父程序fork()出一個子程序,子程序執行結束後作業系統會回收子程序使用的記憶體、開啟的檔案等資源。但是,依舊會保留PCB,因為其中包含子程序結束時的狀態等資訊,按理來說作業系統想把這個資訊傳遞給它的父程序。因此,父程序呼叫wait()就可以得到子程序的退出資訊了,子程序同時也完全消失。
考慮這樣一種情況,子程序exit(),父程序還沒有wait(),這時子程序除了PCB表沒有任何資源,這時子程序就被稱為殭屍程序(zombie)。
在考慮另外一種情況,父程序最終也沒有呼叫wait()就結束了,這時子程序沒了父程序,它就是孤兒程序。這時作業系統會把Init程序(pid=1)作為子程序的父程序,Init程序定期呼叫wait(),以回收孤兒程序。
2.如何建立殭屍程序
寫一個函式,fork()一個子程序,子程序結束時父程序在等待,這時子程序就是殭屍程序。
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() { pid_t pid; pid= fork(); if(pid < 0) { fprintf(stderr,"Fork Failed!\n"); } else if(pid == 0) //child process { ; //do nothing } else //father process { sleep(20); wait(NULL); } return 0; }