僵尸进程和孤儿进程
来源:互联网 发布:小企业的会计软件 编辑:程序博客网 时间:2024/06/04 19:43
Linux下进程的状态:
1.R ( running ) 可执行行态。
2.S ( sleeping ) 可中断睡眠态。
3.D (disk sleep)不可中断的睡眠,也叫硬盘睡眠。
4.T (Stop)暂停或跟踪状态。
5.X (Dead)即将被销毁。
6.Z (zombie)僵尸状态,等待回收资源。
僵尸状态:
当一个进程退出时,它并不是完全消失,而是等到它的父进程通过调用wait()系统调用来回收该子进程的退出状态和资源,在这个等待的过程中进程处于僵死状态。
以下代码来制造僵尸进程:
#include<unistd.h> 2 #include<stdio.h> 3 #include<error.h> 4 #include<stdlib.h> 5 int main() 6 { 7 pid_t pid=fork(); 8 if(pid<0) 9 { 10 perror("fork"); 11 } 12 else if(pid==0) 13 { 14 //child 15 printf("child: pid=%d, ppid=%d \n ",getpid(),getppid()); 16 exit(0);//退出子进程 18 } 19 else{ 20 //father 21 printf("father: pid=%d ,ppid=%d \n ",getpid(),getppid()); 22 } 23 sleep(5);//睡眠五秒后退出 24 system("ps -l"); 25 return 0; 26 }
输出结果为:
子进程变成僵尸进程,等待父进程回收。
孤儿进程:
如果在这个期间,父进程退出了,并没有回收子进程的资源和状态,那么该子进程会变成孤儿进程,最终会被1号进程,也就是init进程收养。其次init会定期来调用wait()来完成僵尸进程的回收。
程序为以下:
#include<unistd.h> 2 #include<stdio.h> 3 #include<error.h> 4 #include<stdlib.h> 5 int main() 6 { 7 pid_t pid=fork(); 8 if(pid<0) 9 { 10 perror("fork"); 11 } 12 else if(pid>0) 13 { 14 //father 15 printf("father: pid=%d, ppid=%d \n ",getpid(),getppid()); 16 sleep(1);//睡眠一秒 打印pid 17 exit(1);//退出父进程,让子进程变为孤儿进程 18 } 19 else{ 20 //child 21 printf("child: pid=%d ,ppid=%d \n ",getpid(),getppid()); 22 sleep(5);//睡眠5s 后退出 23 } 24 system("ps -l"); 25 return 0; 26 }
父进程先退出,子进程变为孤儿进程被init领养(1号进程)。
注意:僵尸进程太多,无法回收会导致系统资源被占用太多,从而系统消耗太大而奔溃。
阅读全文
0 0
- 孤儿和僵尸进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- Maven学习详解(10)——Maven常用命令大全与pom文件讲解
- 普通APP如何使得系统休眠
- 深度神经网络在图像识别应用中的演化【笔记】
- 最小生成树Prim算法
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- 僵尸进程和孤儿进程
- js 正则验证手机号
- [Pandas] 10分钟Pandas之旅 01
- 感染病毒WannaCry? 信息安全有华胜信泰
- 错误:argument of type "char *" is incompatible with parameter of type "LPCWSTR"
- 关于 MYSQL5.6 版本 my.ini 文件的位置
- Ubuntu linux 快速入门
- AJAX多级下拉联动【JSON】
- JAVA中设置了线程优先级,能保证这个线程一定先执行吗?