SIGCHLD信号与SIG_IGN处理的使用
//因为并发服务器常常fork很多子进程,子进程终结之后需要
//服务器进程去wait清理资源。如果将此信号的处理方式设为
//忽略,可让内核把僵尸子进程转交给init进程去处理,省去了
//大量僵尸进程占用系统资源。(Linux Only)
if (pid < 0) // error check.
handle_err();
exit (execl(....)); // child process.
else
if (wait(&ret) < 0)
perror(/"wait/"); //parent process
//在这里wait,都会得No Such process的错误,
//因为子进程终止后,内核会向父进程发送SIGCHLD
//信号,但是上面已将此信号设为忽略,实质上由
//init来接收此子进程的处理。
signal(SIGCHLD,SIG_IGN);
这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。
2)我们调用fork函数派生一个子进程后,当子进程快要结束,会向父进程发送一个SIGCHLD信号,告诉父进程我快结束,赶快调用wait函数,来回收子进程的退出状态和其他信息。
这就是一种我们通常来预发僵尸进程产出的方法,在父进程接收到SIGCHLD信号后,将默认行为改为wait来回收子进程的信息。如果父进程没有调用wait函数,子进程先于父进程退出,则子进程将成为僵尸进程。
但是wait函数需要阻塞父进程直到子进程结束为止,对于并发要求较高的并发服务器,可能就不是很适用。
这里就引出第二种解决僵尸进程的方法,将僵尸进程交给init进程来领养,回收子进程退出状态和其他信息。当我们忽略SIGCHLD信号,内核将把僵尸进程交由init进程去处理,能够省去大量僵尸进程占用系统资源。
即调用:
signal(SIGCHLD, SIG_IGN)
SIGCHLD信号与SIG_IGN处理的使用相关推荐
- Linux解决僵尸进程的几种方式,SIGCHLD信号设置SIG_IGN处理方式等
目录 僵尸进程 解决方式 父进程阻塞调用wait() 父进程非阻塞调用waitpid() SIGCHLD信号 SIG_IGN信号 僵尸进程 我们知道linux下进程有种状态叫做僵尸状态; 原因是父进程 ...
- linux下的僵尸进程处理SIGCHLD信号【转】
转自:http://www.cnblogs.com/wuchanming/p/4020463.html 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打 ...
- Linux--信号signal、父子进程、SIGCHLD信号相关命令
目录 1.概念: 2.信号的存储位置: 3.常见的信号的值以及对应的功能说明: 4.信号的值在系统源码中的定义: 5.响应方式: 6.改变信号的相应方式: (1)设置信号的响应方式: (2)默认:SI ...
- Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号
首先区分一下Linux信号跟进程间通信中的信号量,它们的关系就犹如老婆跟老婆饼一样,没有一毛钱的关系. 信号的概念 信号的概念:信号是进程之间事件异步通知的一种方式,属于软中断.比如:红绿灯是一种信号 ...
- Linux信号:SIGCHLD信号和僵尸进程
1. SIGCHLD信号产生条件: (1)子进程终止: (2)子进程收到SIGSTOP信号被暂停: (3)子进程处于暂停状态,收到SIGCONT信号被唤醒. 2. 捕捉SIGCHLD,避免僵尸进程: ...
- 【Linux】SIGCHLD信号
文章目录 SIGCHLD信号 SIGCHLD信号 回忆: 为了避免出现僵尸进程,父进程需要使用wait或waitpid函数等待子进程结束,父进程可以阻塞等待子进程结束,也可以非阻塞地查询的是否有子进程 ...
- [ Linux ] 可重入函数,volatile 关键字,SIGCHLD信号
目录 1.可重入函数 2.volatile 2.1从信号角度理解volatile的作用 2.2volatile的作用 3.SIGCHLD信号 3.1SIGCHLD信号的验证 1.可重入函数 在数据结构 ...
- Linux | 可重入函数 | volatile | SIGCHLD信号
文章目录 可重入函数 可重入与线程安全 volatile volatile和const同时修饰变量 SIGCHLD信号 可重入函数 当一个函数可以被两个执行流调用,我们称该函数具有重入特征 如果一个函 ...
- Day53 Linux setitimer函数 信号集操作函数 信号捕捉 SIGCHLD信号
目录 setitimer函数 信号集操作函数 1.信号集设定 2.igprocmask函数 3.sigpending函数 信号捕捉 1.signal函数 2.sigaction函数 SIGCHLD信号 ...
最新文章
- Leangoo Talk第一期——Scrum与OKR融合实践
- 安卓双摄像头录像_android开发之调用手机的摄像头使用MediaRecorder录像并播放_Android_脚本之家...
- 如何用JS实现音乐播放、暂停
- 腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践
- 微软为Win11用户更新了剪贴工具、计算器以及邮件和日历应用
- mysql_safe不存在_mysql5.7.9安装后找不到mysqld_safe和mysqld_multi程序
- DB与ES混合应用之数据实时同步
- Spring框架学习[IoC容器高级特性]
- 每天Leetcode 刷题 初级算法篇-打乱数组
- 详析Exchange 2007/2010 SSL证书如何安装
- Redis基础6(Redis6管道)
- 高并发消息队列常用通知机制
- [渝粤教育] 中国地质大学 计算机图形学(新) 复习题 (2)
- java的学习--第一章 java基础入门
- 计算机主机有自带的声音吗,Windows XP 系统中没有音频设备,怎么办?
- 视频怎么剪辑才好看?学视频剪辑必读入门指南
- MATLAB之多项式插值
- 判断链表是否为【回文结构】
- 物联网平台分为几层,你了解吗
- python中查找文件当前位置_如何查找当前目录和文件目录
热门文章
- OpenCV(C++)---加载,修改,保存图像
- 萧秋雨----四方友金
- 有理数加减乘除 计算机应用带答案,计算机应用数学-(组合数学)-答案哈工大
- 达龙云服务器连不上,达龙云电脑为什么连不上
- Ueditor字体背景颜色选项颜色修改
- rust怎么平分东西_腐蚀Rust游戏中有哪些物品 腐蚀Rust游戏所有物品汇总 (3) _游侠网...
- Vue安装axios后报错:Cannot read properties of undefined(reading ‘use‘)
- 一个男人写给媳妇的搞笑检讨书
- 1300+充电,徐云的流浪日记是怎样打动B站用户?
- Hybris的安装过程