linux父进程循环,LINUX C 父进程建立多个子进程循环非堵塞回收列子
下面 代码主要用于复习,留于此
点击(此处)折叠或打开
/*************************************************************************
> File Name: fork5.c
> Author: gaopeng QQ:22389860 all right reserved
> Mail: gaopp_200217@163.com
> Created Time: Sun 02 Jul 2017 02:39:16 AM CST
************************************************************************/
#include
#include
#include
#define MAXPNUM 3
typedef struct handler
{
int* pidarr;
int childnum;
} HANDLER;
int main(void)
{
int i = 0;
int m = 0;
int psre = 0;
HANDLER pidhd;
pidhd.pidarr = (int*)calloc(MAXPNUM+1,sizeof(int));//初始化内存
pidhd.childnum = 0;//初始化进程数量
for(i = 0 ;i
{
m = fork();
if(m == –1)
{
perror(“fork:”);
}
else if( m == 0 )
{
printf(“CHILD: I is child process pid: %d parent process pid: %d n”,getpid(),getppid());
sleep(60);
break;
}
else
{
sleep(1);
pidhd.childnum ++;//进程num+1
*(pidhd.pidarr+i) = m;//指针移动+1
printf(“PARENT: I is parent process pid: %d i fock chlid pid: %d n”,getpid(),m);
}
}
if(i == MAXPNUM)//一定为父进程
{
for(i=0;*(pidhd.pidarr+i);i++)
{
printf(“child process is pid:%dn”,*(pidhd.pidarr+i));
}
}
if(i == MAXPNUM)//一定为父进程
{
printf(“parent pid %d fock child process number is %d finsh!! n”,getpid(),pidhd.childnum);
while(pidhd.childnum > 0)
{
for(i = 0;i< MAXPNUM ;i++) //WNOHANG非堵塞循环回收
{
if(*(pidhd.pidarr+i) != 0 && waitpid(*(pidhd.pidarr+i),&psre,WNOHANG) > 0 )
{
if (WIFEXITED(psre))//是否正常退出获取其退出值
printf(“child %d exit %dn”, *(pidhd.pidarr+i), WEXITSTATUS(psre));
else if (WIFSIGNALED(psre))//是否异常退出信号终止获得信号值
printf(“child %d cancel signal %dn”, *(pidhd.pidarr+i), WTERMSIG(psre));
*(pidhd.pidarr+i) == 0;
pidhd.childnum––;
break;
}
}
}
free(pidhd.pidarr);
}
return 1;//子进程父进程均已return 1 退出
}
输出如下可以捕获子线程由于kill 发信号终止:
▽aopeng@bogon:~/linux0411/process$ ./a.out
CHILD: I is child process pid: 2588 parent process pid: 2587
PARENT: I is parent process pid: 2587 i fock chlid pid: 2588
CHILD: I is child process pid: 2589 parent process pid: 2587
PARENT: I is parent process pid: 2587 i fock chlid pid: 2589
CHILD: I is child process pid: 2590 parent process pid: 2587
PARENT: I is parent process pid: 2587 i fock chlid pid: 2590
child process is pid:2588
child process is pid:2589
child process is pid:2590
parent pid 2587 fock child process number is 3 finsh!!
child 2588 cancel signal 9
child 2589 cancel signal 15
child 2590 cancel signal 11
可以捕获正常终止
gaopeng@bogon:~/linux0411/process$ ./a.out
CHILD: I is child process pid: 2597 parent process pid: 2596
PARENT: I is parent process pid: 2596 i fock chlid pid: 2597
CHILD: I is child process pid: 2598 parent process pid: 2596
PARENT: I is parent process pid: 2596 i fock chlid pid: 2598
CHILD: I is child process pid: 2599 parent process pid: 2596
PARENT: I is parent process pid: 2596 i fock chlid pid: 2599
child process is pid:2597
child process is pid:2598
child process is pid:2599
parent pid 2596 fock child process number is 3 finsh!!
child 2599 cancel signal 1
child 2597 exit 1
child 2598 exit 1
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-2140651/,如需转载,请注明出处,否则将追究法律责任。
linux父进程循环,LINUX C 父进程建立多个子进程循环非堵塞回收列子相关推荐
- linux 两个子进程,父进程创建两个子进程,在收到中断信号后杀死两个子进程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键):捕捉到中断信号后,父进程用系统调用kill( ...
- php 一秒操作一次_php守护进程 加linux命令nohup实现任务每秒执行一次
Unix中 nohup 命令功能就是不挂断地运行命令,同时 nohup 把程序的所有输出到放到当前目录 nohup.out 文件中,如果文件不可写,则放到 /nohup.out 文件中.那么有了这个命 ...
- linux 创建子进程,linux中fork同时创建多个子进程的方法(一)
Fork同时创建多个子进程方法 第一种方法:验证通过 特点:同时创建多个子进程,每个子进程可以执行不同的任务,程序 可读性较好,便于分析,易扩展为多个子进程 int main(void) { prin ...
- linux 进程 系统调用,linux进程与系统调用
进程管理 linux系统的实现非常特别:他对线程和进程并不特别区分.对linux而言,线程只不过是一种特殊的进程罢了. 现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存.虽然实际上可能是许多 ...
- linux两个子进程通信,Linux c 匿名管道实例—创建两个子进程与父进程进行管道通信...
综合: 建立两个子进程: 一个负责计算1-50000的素数 另外一个负责计算50001-100000 父进程负责存储 利用fork创建两个子进程的框架: #include #include #incl ...
- fork()创建多个子进程
fork()创建多个子进程 在学习linux中,老师布置了一个作业: 编写一段程序,使用系统调用fork)创建两个子进程.当此程序运行时,在系统中有一个父进程和两个子进程活动.让每一个进程在屏幕上显示 ...
- linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID
请教linux下c语言函数fork父进程打印子进程的PID 关注:296 答案:2 信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...
- linux子进程父进程例子,linux 子进程访问父进程
问题分析 ECS Linux 系统下 Apache 的默认工作模式是 prefork MPM,使用多个子进程,每个子进程只有一个线程.每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较 ...
- linux内核对孤儿进程寻父,读薄「Linux 内核设计与实现」(2) - 进程管理和调度
这篇文章是<读薄「Linux 内核设计与实现」>系列文章的第 II 篇,本文主要讲了以下问题:进程管理的任务.进程管理与其他模块的依赖关系.进程描述符和任务队列.进程的创建.线程的实现.进 ...
最新文章
- 6月8日云栖精选夜读丨阿里云宣布与国内规模最大的汽车企业上汽集团合作
- python变量词是什么意思_python1变量,表达式和语句
- 手撸一款精美的水波气泡
- @程序员,Web 开源神器了解一下? | 程序员硬核评测
- Android集成Zxing
- Java基础面试题(2022最新版汇总)
- 计算机设备显示黄色感叹号,电脑没声音,设备管理器中声音出现黄色感叹号怎么办?...
- 模型机CPU设计——ALU函数发生器(6)
- 非常好用的桌面壁纸更换软件
- html的浮动跟标准流,网页布局的 标准流 浮动流 与 定位流
- js动态添加html页签(JavaScript 拼接html标签代码)
- 谷歌Chrome浏览器
- linux 配置使用ftp 使用账号密码登陆失败
- 计算机cpu的字母,电脑处理器后面的字母你认识几个?不认识跟我来学学(intel篇)...
- html怎么做一个心形边框,使用CSS获取心形边框?
- P2P模式分析之资金池与第三方托管
- 【android】SSL peer shut down incorrectly
- vue-element-admin花裤衩项目,关于下载 svg 并放到文件夹之中,修改Icon字体图标的颜色样式问题
- Unity 多场景/大场景加载解决方法
- 【Hive知识体系详细教程】
热门文章
- 用 vue2 和 webpack 快速建构 NW.js 项目(1)
- dataTables插件使用
- iOS - LocalCache 本地数据缓存
- Project facet Dynamic Web Module version 3.1 is not supported.
- Yii基于角色的访问控制(非Rbac)
- 【Java并发性和多线程】线程安全及不可变性
- 让模块支持“导入”“导出”功能
- 计算机应用基础成教作业,(计算机应用基础成教08A卷1.doc
- protobuf java 生成_protobuf代码生成
- 升级android 6.0系统