子进程的异步等待方式
来源:互联网 发布:空性智慧知乎 编辑:程序博客网 时间:2024/06/18 15:14
SIGCHLD,在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程,按系统默认将忽略此信号,如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。
#include<stdio.h>#include <sys/types.h>#include <sys/wait.h>#include<signal.h>void myhandler(int sig){ printf("i am get a sig:%d\n",getpid());}int main(){ int i=0; signal(SIGCHLD,myhandler); if(fork()==0) { printf("i am child:%d\n",getpid()); exit(1); } else { wait(NULL); printf("i am father:%d\n",getpid()); } return 0;}
但是这样只处理了一个僵尸进程
假如有多个僵尸进程呢,因为收到多个信号,但是只记录一次因此需要循环回收.
因为如果是9个子进程都退出了,还有一个没有退出,但必须也要在最后一个退出的时候给父进程发送一个sigchild信号因此要是非阻塞的
#include<stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include<signal.h>void myhandler(int sig){ do { pid_t ret=waitpid(-1,NULL,WNOHANG); if(ret>0) { printf("wait success i am get a sig:%d\n",sig); } else { printf("wait faiured!\n"); break; } } while(1);}int main(){ int i=0; signal(SIGCHLD,myhandler); if(fork()==0) { printf("i am child:%d\n",getpid()); exit(1); } else { while(1) { printf("i am father,i do myself things\n"); sleep(1); } } return 0;}
阅读全文
0 0
- 子进程的异步等待方式
- 子进程的异步等待方式
- Linux子进程的异步等待方式
- Linux----子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 【Linux】子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 子进程的异步等待方式
- 1020. 月饼 (25)
- 关于C#串口通讯问题!
- 使用scikit-learn 0.18中的警告
- 机器学习资源大全
- codevs 1138 聪明的质监员
- 子进程的异步等待方式
- Linux下配置SFTP服务器
- Git 三大区域的操作分析
- 嵌入式软件分层
- Hibernate——懒加载解析
- 自定义带倒影效果的TextView
- 【源码剖析】LINUX下的系统调用
- Vim常用指令整理
- 牛客《剑指Offer》 旋转数组的最小数字