什么是signal(SIGCHLD, SIG_IGN)函数

在进行网络编程时候遇到这个函数的使用,自己学习结果如下,有不对请帮忙指正:)

signal(SIGCHLD, SIG_IGN)

打开manpage康一康~

sighandler_t signal ( int signum,  sighandler_t handler );

参数1 int signum: 就是信号的种类,这里是通过信号回收子进程的SIGCHLD. 子进程要终止了,发个SIGCHLD信号告诉父进程

参数2 sighandler_t handler: 这里选的是SIG_IGN, 忽视信号

这个函数总的意思就是: 我父进程不关心你子进程啥时候要退出,一会你退了以后内核把pcb那些该回收的那些回收了就行了(包括子进程号、运行时间信息,占用的内存,mask等等),别告诉我了嚎~
这是一个异步的子进程结束后的料理后事的语句。

为啥要特意写这个函数交代子进程结束以后的“后事”呢?
一切都要从“僵尸进程”这个词说起~

僵尸进程:
子进程已经结束了,不仅父进程没有通过wait/waitpid函数回收,而且init也没回收。这种情况下,这个子进程就变成了僵尸进程。

通俗来讲,就是儿子嗝屁了,爸爸没收视,孤儿院也没收尸,这个儿子就成了个没人管僵尸:(

这样的坏处就是,这个僵尸子进程的一些东西(包括processID,运行时间,退出状态,退出原因等),这些本来应该父进程来取时候释放掉的东西无人问津了,会一直在占着内核,而且processID也一直被僵尸子进程占用着,这个ID号资源可是有限的啊,那要是僵尸多了,就没有processID号分给新要产生的程序了。

所以为了避免一会产生僵尸儿子,父进程就说了,我很忙的哦,先干别的去了,一会子进程结束了以后,内核直接把残余信息销毁了就行了,别跟我说了哈~

当然,有的,父进程说我没啥事情做,我来回收,可以采用阻塞(就是一直等着,直到子进程结束,然后回收掉)或者非阻塞方法回收,通过调用wait/waitpid函数,看看子进程结束了没,结束了就赶紧回收掉,要是需要的话,也可以顺便收集进程的结束原因等信息。

wait函数和waitpid区别:
waitpid可以根据pid指定回收哪个进程, wait是随机回收一个子进程。

什么是signal(SIGCHLD, SIG_IGN)函数相关推荐

  1. signal(SIGCHLD, SIG_IGN) 和 signal(SIGPIPE, SIG_IGN) 使用场景

    一.signal(SIGCHLD, SIG_IGN); 因为并发服务器常常 fork 很多子进程,子进程终结之后需要服务器进程去 wait 清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进 ...

  2. signal(SIGCHLD, SIG_IGN)

    python 中使用import signal就可以导入模块了 signal(参数一,参数二) 参数一:我们要进行处理的信号.系统的信号我们可以再终端键入 kill -l查看(共64个).其实这些信号 ...

  3. signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);

    signal(SIGCHLD, SIG_IGN); 因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给in ...

  4. linux信号函数signal(SIGCHLD, SIG_IGN)

    我们调用fork函数派生一个子进程后,当子进程快要结束,会向父进程发送一个SIGCHLD信号,告诉父进程我快结束,赶快调用wait函数,来回收子进程的退出状态和其他信息. 这就是一种我们通常来预发僵尸 ...

  5. system函数和signal(SIGCHLD, SIG_DFL)的“固定搭配”

    背景知识: 子进程先于父进程结束时,会给父进程发送SIGCHLD信号 如果                                                                ...

  6. signal(SIGPIPE, SIG_IGN)

    关于SIGPIPE导致的程序退出 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIP ...

  7. signal(SIGPIPE, SIG_IGN);

    TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道,  但本端只是收到FIN包. 按照TCP协议的语义, 表示对 ...

  8. signal(SIGHUP, SIG_IGN);

    signal(SIGHUP, SIG_IGN); 的理解 转载于:https://www.cnblogs.com/lanjiangzhou/p/10505653.html

  9. Linux信号详解:signal与sigaction函数【2】

    我们已经讨论了Linux操作系统中"信号"."中断"."僵尸进程"'等重要概念.结合C语言中的setjmp.longjump.sigsetj ...

最新文章

  1. linux中使用u盘和光驱的命令_Linux操作系统下挂载硬盘光驱和U盘的方法
  2. error while loading shared libraries: libz.so.1错误
  3. Zend SDK学习-1
  4. PAT1098【插入排序+堆排序】
  5. c mysql 查不到数据_怎么检测不到MYSQL数据库的存在
  6. linux nfs配置
  7. python黑洞_史上第一张黑洞照片是用Python合成的?
  8. 深入理解 Docker 架构 | 图文
  9. object string java_Object类和String类
  10. 机器学习实战教程(13篇)
  11. opencms10.5.1如何汉化
  12. 固件和微码到底啥区别
  13. leetcode 953. 验证外星语词典 做题笔记
  14. Dubbo负载均衡和路由规则的区别
  15. 计算机网络技术微课,微课在《计算机网络技术》教学中的应用探讨
  16. C语言实现二叉树排序
  17. python排版word文档命令方法大全_教你怎么使用Python对word文档进行操作
  18. 用matlab解系统框图,matlab软件应用介绍 3-6 系统连接框图的模型.ppt
  19. ARM 汇编命令参考AREA
  20. 利用DirectSound实现声卡录音【老毕改版】【Part1】

热门文章

  1. 单片机-c语言LED灯循环闪烁
  2. 超过100项改进 100tv聚好看全新发布
  3. GNSS-ITRS_GCRS_J2000坐标系的相互转换
  4. 关于计算机的职业畅想,我的职业畅想作文
  5. [2023年的每一天]1. 15 看了一天的 B站
  6. 5-羧基四甲基罗丹明TMR标记Polyacetal聚缩醛/HA透明质酸纳米载体TMR--Polyacetal|TMR-HA
  7. MXT6208量产修复工具+v2.0非常好用哦!
  8. B - -- - B
  9. 双路服务器 游戏性能,AMD双路128核EPYC跑分无敌 服务器CPU核多才是王道
  10. 从C到C++ 番外const的用法