2.4 程序控制之殭屍程序和孤兒程序
阿新 • • 發佈:2019-01-05
學習目標:理解殭屍程序和孤兒程序形成的原因
一、孤兒程序
1. 孤兒程序: 父程序先於子程序結束,則子程序成為孤兒程序。子程序成為孤兒程序之後,init程序則會成為其新的父程序,稱為init程序領養孤兒程序。
2. 例程:
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <sys/wait.h> 4 5 int main(void) 6 { 7 pid_t pid; 8 pid = fork(); 9 10 if (pid == 0) { 11 while(1) { 12 printf("I am child, my parent pid = %d\n", getppid()); 13 sleep(1); 14 } 15 } else if (pid > 0) { 16 printf("I am parent, my pid is = %d\n", getpid()); 17 sleep(9); 18 printf("------------parent going to die------------\n"); 19 } else { 20 perror("fork"); 21 return 1; 22 } 23 return 0; 24 }
編譯與執行結果:
二、殭屍程序
1. 殭屍程序:一個程序使用fork建立子程序,如果子程序退出,而父程序並沒有呼叫wait或waitpid獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中。這種程序稱之為僵死程序。
2. 例程:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4#include <sys/wait.h> 5 6 int main(void) 7 { 8 pid_t pid, wpid; 9 pid = fork(); 10 11 if (pid == 0) { 12 printf("---child, my parent= %d, going to sleep 10s\n", getppid()); 13 sleep(10); 14 printf("-------------child die--------------\n"); 15 } else if (pid > 0) { 16 while (1) { 17 printf("I am parent, pid = %d, myson = %d\n", getpid(), pid); 18 sleep(1); 19 } 20 } else { 21 perror("fork"); 22 return 1; 23 } 24 25 return 0; 26 }
編譯與執行結果: