关于SIGCHLD信号的处理
来源:互联网 发布:游戏笔记本电脑知乎 编辑:程序博客网 时间:2024/04/29 07:43
进程一章讲过用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作的同时还要记得时不时地轮询一下,程序实现复杂。
其实,子进程在终止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略,父进程可以自定义SIGCHLD信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程终止时会通知父进程,父进程在信号处理函数中调用wait清理子进程即可。
事实上,由于UNIX的历史原因,要想不产生僵尸进程还有另外一种办法:父进程调用sigaction将SIGCHLD的处理动作置为SIG_IGN,这样fork出来的子进程在终止时会自动清理掉,不会产生僵尸进程,也不会通知父进程。系统默认的忽略动作和用户用sigaction函数自定义的忽略通常是没有区别的,但这是一个特例。此方法对于Linux可用,但不保证在其它UNIX系统上都可用。请编写程序验证这样做不会产生僵尸进程。(这个好)
其实,子进程在终止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略,父进程可以自定义SIGCHLD信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程终止时会通知父进程,父进程在信号处理函数中调用wait清理子进程即可。
事实上,由于UNIX的历史原因,要想不产生僵尸进程还有另外一种办法:父进程调用sigaction将SIGCHLD的处理动作置为SIG_IGN,这样fork出来的子进程在终止时会自动清理掉,不会产生僵尸进程,也不会通知父进程。系统默认的忽略动作和用户用sigaction函数自定义的忽略通常是没有区别的,但这是一个特例。此方法对于Linux可用,但不保证在其它UNIX系统上都可用。请编写程序验证这样做不会产生僵尸进程。(这个好)
0 0
- 关于SIGCHLD信号的处理
- 关于SIGCHLD信号的处理
- 【信号】---关于SIGCHLD信号
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号与SIG_IGN处理的使用
- SIGCHLD信号处理
- 关于信号signal()、SIGCHLD......
- 关于SIGCHLD信号问题
- linux的SIGCHLD信号
- 嵌入式 SIGCHLD信号与SIG_IGN处理的使用示例
- linux下的僵尸进程处理SIGCHLD信号
- linux下的僵尸进程处理SIGCHLD信号
- sigprocmask 阻塞进程
- Linux进程实践(2) --僵尸进程与文件共享
- 为 VB.NET 的类增加自定义事件
- ubuntu12.04下apache2+mod_wsgi+django部署配置
- 在arcmap中计算每个要素占总量的百分比
- 关于SIGCHLD信号的处理
- Android奇葩的实现方式之ScrollView嵌套ListView
- UVa 12166 - Equilibrium Mobile
- 浪潮 inspur K-DB 技术白皮书
- android AsyncTask介绍
- Codeforces Round #292 (Div. 2)
- [sig13]Lighting technology of "The Last Of Us"
- Linux进程实践(3) --进程终止与exec函数族
- POJ 3051 Satellite Photographs