admin 管理员组文章数量: 887032
什么是signal(SIGCHLD, SIG
什么是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
版权声明:本文标题:什么是signal(SIGCHLD, SIG 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687390537h97200.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论