linux 僵死日志,关于僵死进程
首先介绍一下什么是僵死进程
int main()
{
int n = 0;
char *s = NULL;
pid_t pid = fork();
assert(pid != -1);
if(pid == 0)
{
n = 3;
int i = 0;
for(; i < n; i++)
{
sleep(1);
printf("child running\n");
}
}
else
{
n = 7;
int i = 0;
for(; i < n; i++)
{
sleep(1);
printf("parent running\n");
}
}
}
此时程序运行后,在子程序结束后,父进程尚且没有完成,此时查看一下进程信息,可以得到
可以看到两个signalttt进程,其中子程序的signalttt进程已经处于defunct状态,此时子进程已经代码执行完毕,但是这个进程并没有终止,这就对CPU的进程资源造成了很多的浪费,如果说短时间内产成了大量的僵死进程,那么此时因为进程号等信息占用,此时不能创建新的进程
为什么会出现僵死进程呢?
我们来改一下代码:
int main()
{
int n = 0;
char *s = NULL;
if(pid == 0)
{
n = 7;
int i = 0;
for(; i < n; i++)
{
sleep(1);
printf("child running\n");
}
}
else
{
n = 3;
int i = 0;
for(; i < n; i++)
{
sleep(1);
printf("parent running\n");
}
}
}
再次在运行途中查看ps
此时并没有和之前一样出现僵死进程,而我们仅仅是将子进程改的运行的时间比父进程长了一些,然后再次查看时候,发现僵死进程就消失了???
所以我们可以得到条件,僵死进程中,父进程一定要“活得久”~
这里本质上是因为,在Linux系统中,进程是有父子关系的,从init进程开始展开,是一个大的进程树,而子进程的结束都会由子进程向它的父进程发送一个信号(SIGCHLD),而此时如果父进程在运行中没有获取子进程的退出码,这样就出现了僵死进程
关于僵死进程的处理
在Linux系统中有一个特殊的处理方法,signal(SIGCHLD,SIG_IGN);子进程在结束时候会向父进程发送一个子进程结束的信号,我们调用signal函数去忽略掉这个信号,那么这时候子进程就会变成了孤儿进程,会自动的被init接收处理,init进程会在进程表中挨个查找孤儿进程,也就是说,进程表越大那么这个过程造成的资源占用也就越多
也可以在父进程中用wait();函数,这样在执行到这句时,父进程会等待到子进程结束后,但是这句会造成父进程的挂起
同样的,也可以用signal(SIGCHLD,fun);去实现一个处理子进程信号的函数,让父进程接收到信号之后,调用wait()将子进程结束掉
还有一种特殊的是利用两次fork(),这样父进程在第一次创建的子进程1中,再次创建一个子进程2,子进程2负责执行子进程的工作,而子进程1只做一件事件--------wait(子进程2);专心致志等待子进程2结束,这样就处理了wait导致的进程挂起的问题
`
linux 僵死日志,关于僵死进程相关推荐
- linux查看php日志命令,linux查看日志的三种命令是什么,linux查看进程命令
linux查看日志的三种命令是什么Linux查看日志的三个命令是什么,linux查看日志有三个命令:1.查看实时更改日志,代码为[tail-f filename]:2.搜索关键字附近的日志代码为[ca ...
- linux ps内存占用率,linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定...
背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况. 一. linux ps命令,查看某进程cpu和内存占用率情况 [root@test vhost]# ps aux US ...
- Linux文件系统、虚拟内存、进程与线程、锁
文章目录 文件系统 su Linux 中默认没有 super 命令 /proc /etc /var /root /home /bin /dev /lib /sbin tmp 句柄 maxfd PWD ...
- 十天学Linux内核之第二天---进程
十天学Linux内核之第二天---进程 原文:十天学Linux内核之第二天---进程 都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘 ...
- 操作系统(Linux与Windows)的进程管理
进程 描述和管理程序的"运行过程"-------进程 进程概念 定义:进程是程序在某个数据集合上的一次运行活动 进程的特征 动态性 进程是程序的一次执行过程,动态产生消亡 并发性 ...
- Linux系统状态检测及进程控制--2
Linux系统状态检测及进程控制--1(http://crushlinux.blog.51cto.com/2663646/836481) 4.僵死(进程已终止,但进程描述符存在,直到父进程调用wait ...
- linux内核设计与实现---进程管理
进程管理 1 进程描述符及任务结构 分配进程描述符 进程描述符的存放 进程状态 设置当前进程状态 进程上下文 进程家族树 2 进程创建 写时拷贝 fork() vfork() 3 线程在Linux中的 ...
- Linux网络技术管理及进程管理(week2_day4)--技术流ken...
Linux网络技术管理及进程管理(week2_day4)--技术流ken OSI七层模型和TCP/IP四层模型 OSI七层模型:OSI(Open System Interconnection)开放系统 ...
- 【linux基础】18、进程管理工具
1.pstree 进程树查看 -p:并显示各进程的PID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
最新文章
- 东南大学和山东大学计算机学院,东南大学和山东大学都是985、211哪所综合实力更强些呢?...
- 弯曲传传感器 WWW.TE.COM
- excel插入一列日期 pandas_将日期和时间从Excel拉到Pandas并将其组合为时间戳
- python技巧:拆分多层嵌套列表
- C++面向接口编程和C++多态
- spring的controller是单例模式,但是是多线程,各个线程之间不影响
- Apache CarbonData 1.5.0编译及安装
- firefox flash-plugin怎样安装
- php 匹配双字节字符串,收集一些常用的正则表达式(匹配中文字符、匹配双字节字符、匹配HTML标记、匹配空行 and so on~~~)...
- Upload-Labs(6-10)
- python图像标记工具怎么用_一眼看穿的最佳图像标记工具!
- 大数据大屏设计-PS拉框助手
- 管家婆请确认输入正确的服务器名,管家婆辉煌II软件登录提示连接失败请确认输入正确的服务器名...
- WPF入门教程系列一——基础
- python 调用函数
- TeamTalk IM_PDUBASE详解
- MYSQL环境搭建(windows)
- 2021-03-17T23:47:55.978+08:00 UTC时间转换
- MacOs “无法打开***,因为无法验证开发者...”
- 网站SEO优化的一些知识分享
热门文章
- 图解常用的RAID 0, RAID 1, RAID 5, RAID 10
- 2017 CCPC final HDU - 6252 Subway Chasing (差分约束)
- 17 哈尔滨CCPC final J - Subway Chasing 差分约束
- 教你如何能够从小白快速入门MAYA,刚开始学习MAYA必看
- 最佳并发数和最大并发数
- python return怎么用,python return用法是什么
- 什么样的PDF转换成PPT转换器比较好
- 正则表达式高阶技巧之环视的组合(使用python实现)
- 被盲盒拯救的泡泡玛特:品控仍是老大难,消费者投诉不间断
- dhl:不用游标批量更新的SQL语句