欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

什么是signal(SIGCHLD, SIG_IGN)函数

程序员文章站 2022-03-07 20:02:44
...

什么是signal(SIGCHLD, SIG_IGN)函数

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

signal(SIGCHLD, SIG_IGN)

SIGCHLD: 子进程要终止了,发个SIGCHLD信号告诉父进程
SIG_IGN: 忽视这个信号

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

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

僵尸进程:
子进程已经结束了,但是它的父进程没有通过wait/waitpid函数获得子进程结束的状态。这种情况下,这个子进程就是僵尸进程。

通俗来讲,就是儿子嗝屁了,但是没告诉爸爸,爸爸不知道。这个儿子就成了个没人管僵尸:(

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

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

当然,有的,父进程说我不忙,就等着儿子结束~于是就调用wait/waitpid函数,看看当前进程的子进程结束了没,结束了就赶紧把他们的信息收集起来、销毁后返回值是processID,要是没结束就返回wait为-1,同时errno被置为ECHILD。

相关标签: 操作系统 网络