并发处理时防止产生僵尸进程
来源:互联网 发布:淘宝企业店铺运营 编辑:程序博客网 时间:2024/06/18 16:41
死进程,同时内核会向其父进程发送SIGCHLD(或SIGCLD)信号。此时要分几种情况:
1、父进程处理SIGCHLD信号,调用wait,僵死进程消失。这样我们就看不到僵尸进程。
2、父进程忽略SIGCHLD信号,随着子进程不断产生、结束,僵死进程的数目不断增加,导致影响系统速度及其他一些问题。
不需长期运行的程序,即使产生子进程也不会导致大量僵死进程存在。因为,父进程退出时,其产生的子进城成为“孤儿“进程,由init(1号进程)进程接管,init进程在子进程退出时会处理SIGCHLD信号,给子进程“收尸“。
/**
* A handler, which is called on child proccess exit.
*/
void sig_chld_handler(void) {
//other proccess
while (waitpid(-1, NULL, WNOHANG) > 0);
}
#ifdef __USE_GNU
signal(SIGCHLD, (sighandler_t )sig_chld_handler);
#endif
#ifdef __USE_BSD
signal(SIGCHLD, (sig_t )sig_chld_handler);
#endif
signal返回值: 返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。
SIGCHLD 进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽
略
下面的情况可以产生Signal:
1. 按下CTRL+C产生SIGINT
2. 硬件中断,如除0,非法内存访问(SIGSEV)等等
3. Kill函数可以对进程发送Signal
4. Kill命令。实际上是对Kill函数的一个包装
5. 软件中断。如当Alarm Clock超时(SIGURG),当Reader中止之后又向管道写数据(SIGPIPE),等等
- 并发处理时防止产生僵尸进程
- 防止僵尸进程的产生
- 僵尸进程产生和处理
- 僵尸进程的产生与处理
- 僵尸进程的产生与处理
- 如何防止僵尸进程的产生之信号
- 如何防止僵尸进程的产生之fork两次
- 僵尸进程的产生
- 僵尸进程产生
- 多进程并发如何防止僵尸进程——服务器开发
- 多进程并发如何防止僵尸进程——服务器开发
- Python urllib2产生僵尸进程
- 僵尸进程的产生原因
- 僵尸进程的产生原因
- 如何避免产生僵尸进程
- 僵尸进程如何产生的
- 防止僵尸进程的方法:
- Unix平台防止僵尸进程
- Linux性能指标
- connect: network is unreachable
- arm 的pc和lr寄存器
- WPF之自定义窗体
- ssl ddos攻击
- 并发处理时防止产生僵尸进程
- Delphi 事件触发!
- Eclipse Java常用快捷键
- URLConnection 中文参数乱码问题
- poj3468---线段树
- 一次OEM 12c不能正确启动的问题
- STL中的所有算法(70个)
- Maven @ jar installation & confliction
- 详解C中volatile关键字