为什么使用 waitpid 捕获 SIGCHLD
来源:互联网 发布:linux根目录设置多大 编辑:程序博客网 时间:2024/06/01 20:14
unix 网络编程
5.9 小节
Q: 处理 SIGCHLD 时为什么使用 while waitpid 捕获, 而不是 wait ?
使用 wait 捕获 SIGCHLD 时代码如下
sig_chld(int signo){ pid = wait(NULL)}
如书上所说,当有5个SIGCHLD 同时发送时 sig_chld 仅仅只能执行一次,那么其余4个还是处于僵死状态
那么使用 waitpid 后
sig_chld(int signo){ while ((pid = waitpid(-1, &stat, WNOHANG))> 0)}
加上 while 就可以捕获其余的4个进程,那么为什么 wait 不可以加上 while 呢?
这是因为当有多个进程时,有一个发送了 SIGCHLD, 那么就会进入 sig_chld
处理完,wait 将会阻塞,等待其他的进程状态改变,那么这里将回不到被中断的代码中去了
而使用 waitpid 时, 因为有了 WNOHANG (return imediately if no child has exited)这个 option , 那么 waitpid 将不会阻塞在这里
Q: 当多个信号同时发送时, sig_chld 只执行了一次,为什么能够处理所有进程的 SIGCHLD 呢?
A; 这是因为关键的 while, 当处理完一个后又重新回到 waitpid , 那么waitpid 就会检查是否有进程状态改变
发现有,那么继续执行,就可以回收其他子进程的资源
0 0
- 为什么使用 waitpid 捕获 SIGCHLD
- SIGCHLD和waitpid的使用
- SIGCHLD和waitpid的使用
- SIGCHLD和waitpid的使用
- SIGCHLD和waitpid的使用
- 偶然看到的SIGCHLD和waitpid的使用
- Linux中的SIGCHLD及wait,waitpid的使用
- 使用waitpid函数处理SIGCHLD信号-避免僵死进程
- SIGCHLD信号和waitpid(经典问题)
- SIGCHLD信号和waitpid(经典问题)
- waitpid和SIGCHLD信号回收僵尸进程
- 十二、Linux系统编程-进程(五)SIGCHLD、wait、waitpid、system
- SIGCHLD
- wait()和waitpid()函数的区别和SIGCHLD信号的关系
- 《unix网络编程》(10)wait/waitpid处理僵死进程(SIGCHLD信号)
- waitpid使用实例
- waitpid使用实例
- wait/waitpid函数使用
- 关于android中PendingIntent.getBroadcase的注册广播
- 【C++、SQL学习笔记3】杂记
- 中国开源社区
- SVN的使用——基本知识,Server搭建与Client日常使用维护
- 如何优化MySQL insert性能
- 为什么使用 waitpid 捕获 SIGCHLD
- kyeremal-网络流24题T2-太空飞行计划问题
- 第3题
- swing jframe 框架面板知识
- 路由器---更改交换机
- 《c primer plus》编程练习回顾-第十一章(上)
- java基础入门-你不知道的string-不可改变性与编译器优化
- 2015年第六届蓝桥杯本科B组C++省赛个人题解
- nagios插件之系统打开文件数监控