转自:
1) http://blog.csdn.net/liuchao1986105/article/details/6440896
2) http://blog.csdn.net/u013246898/article/details/52985739
1)signal(SIGCHLD, SIG_IGN); //忽略SIGCHLD信号,这常用于并发服务器的性能的一个技巧
//因为并发服务器常常fork很多子进程,子进程终结之后需要
//服务器进程去wait清理资源。如果将此信号的处理方式设为
//忽略,可让内核把僵尸子进程转交给init进程去处理,省去了
//大量僵尸进程占用系统资源。(Linux Only)
some code();
pid = fork(); //生成一个子进程
if (pid < 0) // error check.
handle_err();
if (pid == 0)
exit (execl(....)); // child process.
else
if (wait(&ret) < 0)
perror(/"wait/"); //parent process
//在这里wait,都会得No Such process的错误,
//因为子进程终止后,内核会向父进程发送SIGCHLD
//信号,但是上面已将此信号设为忽略,实质上由
//init来接收此子进程的处理。
对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将 SIGCHLD信号的操作设为SIG_IGN。

signal(SIGCHLD,SIG_IGN);

这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。

2)我们调用fork函数派生一个子进程后,当子进程快要结束,会向父进程发送一个SIGCHLD信号,告诉父进程我快结束,赶快调用wait函数,来回收子进程的退出状态和其他信息。 
这就是一种我们通常来预发僵尸进程产出的方法,在父进程接收到SIGCHLD信号后,将默认行为改为wait来回收子进程的信息。如果父进程没有调用wait函数,子进程先于父进程退出,则子进程将成为僵尸进程。 
但是wait函数需要阻塞父进程直到子进程结束为止,对于并发要求较高的并发服务器,可能就不是很适用。 
这里就引出第二种解决僵尸进程的方法,将僵尸进程交给init进程来领养,回收子进程退出状态和其他信息。当我们忽略SIGCHLD信号,内核将把僵尸进程交由init进程去处理,能够省去大量僵尸进程占用系统资源。

即调用: 
signal(SIGCHLD, SIG_IGN)

SIGCHLD信号与SIG_IGN处理的使用相关推荐

  1. Linux解决僵尸进程的几种方式,SIGCHLD信号设置SIG_IGN处理方式等

    目录 僵尸进程 解决方式 父进程阻塞调用wait() 父进程非阻塞调用waitpid() SIGCHLD信号 SIG_IGN信号 僵尸进程 我们知道linux下进程有种状态叫做僵尸状态; 原因是父进程 ...

  2. linux下的僵尸进程处理SIGCHLD信号【转】

    转自:http://www.cnblogs.com/wuchanming/p/4020463.html 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打 ...

  3. Linux--信号signal、父子进程、SIGCHLD信号相关命令

    目录 1.概念: 2.信号的存储位置: 3.常见的信号的值以及对应的功能说明: 4.信号的值在系统源码中的定义: 5.响应方式: 6.改变信号的相应方式: (1)设置信号的响应方式: (2)默认:SI ...

  4. Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号

    首先区分一下Linux信号跟进程间通信中的信号量,它们的关系就犹如老婆跟老婆饼一样,没有一毛钱的关系. 信号的概念 信号的概念:信号是进程之间事件异步通知的一种方式,属于软中断.比如:红绿灯是一种信号 ...

  5. Linux信号:SIGCHLD信号和僵尸进程

    1. SIGCHLD信号产生条件: (1)子进程终止: (2)子进程收到SIGSTOP信号被暂停: (3)子进程处于暂停状态,收到SIGCONT信号被唤醒. 2. 捕捉SIGCHLD,避免僵尸进程: ...

  6. 【Linux】SIGCHLD信号

    文章目录 SIGCHLD信号 SIGCHLD信号 回忆: 为了避免出现僵尸进程,父进程需要使用wait或waitpid函数等待子进程结束,父进程可以阻塞等待子进程结束,也可以非阻塞地查询的是否有子进程 ...

  7. [ Linux ] 可重入函数,volatile 关键字,SIGCHLD信号

    目录 1.可重入函数 2.volatile 2.1从信号角度理解volatile的作用 2.2volatile的作用 3.SIGCHLD信号 3.1SIGCHLD信号的验证 1.可重入函数 在数据结构 ...

  8. Linux | 可重入函数 | volatile | SIGCHLD信号

    文章目录 可重入函数 可重入与线程安全 volatile volatile和const同时修饰变量 SIGCHLD信号 可重入函数 当一个函数可以被两个执行流调用,我们称该函数具有重入特征 如果一个函 ...

  9. Day53 Linux setitimer函数 信号集操作函数 信号捕捉 SIGCHLD信号

    目录 setitimer函数 信号集操作函数 1.信号集设定 2.igprocmask函数 3.sigpending函数 信号捕捉 1.signal函数 2.sigaction函数 SIGCHLD信号 ...

最新文章

  1. Leangoo Talk第一期——Scrum与OKR融合实践
  2. 安卓双摄像头录像_android开发之调用手机的摄像头使用MediaRecorder录像并播放_Android_脚本之家...
  3. 如何用JS实现音乐播放、暂停
  4. 腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践
  5. 微软为Win11用户更新了剪贴工具、计算器以及邮件和日历应用
  6. mysql_safe不存在_mysql5.7.9安装后找不到mysqld_safe和mysqld_multi程序
  7. DB与ES混合应用之数据实时同步
  8. Spring框架学习[IoC容器高级特性]
  9. 每天Leetcode 刷题 初级算法篇-打乱数组
  10. 详析Exchange 2007/2010 SSL证书如何安装
  11. Redis基础6(Redis6管道)
  12. 高并发消息队列常用通知机制
  13. [渝粤教育] 中国地质大学 计算机图形学(新) 复习题 (2)
  14. java的学习--第一章 java基础入门
  15. 计算机主机有自带的声音吗,Windows XP 系统中没有音频设备,怎么办?
  16. 视频怎么剪辑才好看?学视频剪辑必读入门指南
  17. MATLAB之多项式插值
  18. 判断链表是否为【回文结构】
  19. 物联网平台分为几层,你了解吗
  20. python中查找文件当前位置_如何查找当前目录和文件目录

热门文章

  1. OpenCV(C++)---加载,修改,保存图像
  2. 萧秋雨----四方友金
  3. 有理数加减乘除 计算机应用带答案,计算机应用数学-(组合数学)-答案哈工大
  4. 达龙云服务器连不上,达龙云电脑为什么连不上
  5. Ueditor字体背景颜色选项颜色修改
  6. rust怎么平分东西_腐蚀Rust游戏中有哪些物品 腐蚀Rust游戏所有物品汇总 (3) _游侠网...
  7. Vue安装axios后报错:Cannot read properties of undefined(reading ‘use‘)
  8. 一个男人写给媳妇的搞笑检讨书
  9. 1300+充电,徐云的流浪日记是怎样打动B站用户?
  10. Hybris的安装过程