wait如何处理多进程(多个子进程)
来源:互联网 发布:剑三藏剑男神捏脸数据 编辑:程序博客网 时间:2024/05/28 05:19
#include <stdio.h>#include <stdlib.h>#include <unistd.h>/* linux 系统调用 wait() * 当用fork()创建子进程,子进程在退出后父进程没有调用wait * 就会产生僵尸进程. * * 下面是用fork循环创建多个子进程,在父进程里调用一次wait * 只能回收一个子进程. * * 下面展示如何用wait()回收多个子进程. * * */int main(void){ int procnum = 0, loopnum = 0; int i = 0, j = 0; pid_t fpid; printf("procnum = "); scanf("%d", &procnum); printf("loopnum = "); scanf("%d", &loopnum); for (i = 0; i < procnum; i++) { fpid = fork(); //printf("child pid: %d\n", getpid()); if (fpid == 0){ for (j = 0; j < loopnum; j++) { printf("loop %d\n", j); } exit(0); } } wait(NULL); //调用一次,只能回收一个子进程 sleep(1000); printf("parrent pid: %d\n", getpid()); return 0;}
从截图中可以看到,产生了五个进程,调用一次wait只能回收一个子进程,还有四个僵尸进程,如何回收所有子进程呢,程序改进如下:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>/* linux 系统调用 wait() * 当用fork()创建子进程,子进程在退出后父进程没有调用wait * 就会产生僵尸进程. * * 下面是用fork循环创建多个子进程,在父进程里调用一次wait * 只能回收一个子进程. * * 下面展示如何用wait()回收多个子进程. * * */int main(void){ int procnum = 0, loopnum = 0; int i = 0, j = 0; int ret = 0; pid_t fpid; printf("procnum = "); scanf("%d", &procnum); printf("loopnum = "); scanf("%d", &loopnum); for (i = 0; i < procnum; i++) { fpid = fork(); //printf("child pid: %d\n", getpid()); if (fpid == 0){ for (j = 0; j < loopnum; j++) { printf("loop %d\n", j); } exit(0); } } // 检测到所有子进程都退出,父进程才退出 while (1) { ret = wait(NULL); if (ret == -1) { if (errno == EINTR) { // 返回值为-1的时候有两种情况,一种是没有子进程了,还有一种是被中断了 continue; } break; } } printf("parrent pid: %d\n", getpid()); return 0;}
可以看到,已经没有僵尸进程了..
0 0
- wait如何处理多进程(多个子进程)
- Linux 创建多个子进程
- 一个进程 fork 多个子进程
- 用signal函数处理父进程创建的多个子进程,避免僵死进程的产生
- Fork同时创建多个子进程方法
- linux 操作系统 创建多个子进程
- 父进程创建多个子进程的问题
- 同一个父进程的多个子进程之间的通信
- 一个父进程创建多个子进程,有些需…
- 进程的等待wait() --多进程编程
- linux中创建多个子进程的方法
- linux中fork同时创建多个子进程的方法
- LINUX C:创建与监控多个子进程
- 通过实例体会 fork()同时创建多个子进程
- fork同时创建多个子进程的方法
- linux下一次性fork多个子进程方法
- 在多个子进程处理SOCKET发信,程序很简单,有不好的地方请指点,运行环境AIX
- 创建N个子进程
- 《创业维艰》摘录
- JS基本类型与Java的区别复习
- Factorial Trailing Zeroes
- MySQL密码重置
- JAVA多线程之(CountDownLatch)
- wait如何处理多进程(多个子进程)
- linux中静态库和动态库的区别
- iOS 中打印,以及打印一些特殊的类
- BZOJ3524Couriers
- SDAU 贪心专题 17 小箱子
- TCP协议中的三次握手和四次挥手(图解)
- boost在windows的编译及在vs2010中的配置
- 编写可读代码的艺术 (3)
- 《leetCode》:Power of Two