1. 程式人生 > 其它 >第三章程式設計題

第三章程式設計題

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; }

3.13