僵尸进程:僵尸进程的造成是因为子进程先于父进程退出,而操作系统需要保留了子进程的退出信息,因为有可能父进程需要查看这些退出信息,但是目前父进程没有查看,导致子进程退出了,但是子进程的资源并没有完全被释放掉,而处于僵死状态,这样的子进程也就成为了僵尸进程。
僵尸进程会造成资源的浪费,所以我们需要避免僵尸进程的产生,所以需要在父进程调用wait()或者waitpid()函数来释放掉子进程的退出信息。
僵尸进程的处理方法就是干掉父进程,这样僵尸进程就会变成孤儿进程。
下面是僵尸进程的实现代码
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4
5 int main()
6 {
7 int pid = fork();
8 if(pid<0){
9 perror("fork");
10 }
11 else if(pid == 0){
12 sleep(5);
13 exit(0);
14 }
15 while(1)
16 {
17 sleep(1);
18 }
19 return 0;
20 }
孤儿进程:孤儿进程是由于父进程先于子进程退出,子进程就成了孤儿进程,然后该子进程会由进程号为1的init进程所收养。而孤儿进程并不会造成什么危害,因为init进程会作为他们的父进程对他们进行处理。
下面是孤儿进程的实现代码
1 #include<stdlib.h>
2 #include<stdio.h>
3 #include<unistd.h>
4
5 int mian()
6 {
7 int pid = fork();
8 if(pid < 0)
9 {
10 perror("fork");
11 return 1;
12 }
13 else if (pid == 0)
14 {
15 sleep(10);
16 }
17 else
18 {
19 sleep(3);
20 }
21 return 0;
22 }