#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>
#include <stdio.h> //子进程个数
#define SUB_PRO_COUNT 10 //处理子进程的退出信号
void sub_quit_signal_handle(int sig); //父进程的事件循环
void ParentCycle(); //子进程的事件循环
void ChildCycle(); int main(void)
{
pid_t pid;
int i; //创建SUB_PRO_COUNT个子进程
for(i=; i<SUB_PRO_COUNT; i++)
{
pid = fork();
if( == pid || - == pid )
break;
} //创建子进程失败
if( - == pid )
{
printf("No. %d: fork error\n", i);
}
//子进程的事件循环
else if( == pid )
{
ChildCycle();
}
//父进程的事件循环
else
{
ParentCycle();
} return ;
} void sub_quit_signal_handle(int sig)
{
int status;
//获取退出的那个子进程的状态
int quit_pid = wait(&status);
printf("sub process %d quit, exit status %d\n", quit_pid, status); //新创建一个子进程
pid_t pid = fork();
if( == pid )
ChildCycle();
} void ParentCycle()
{
printf("Parent process %d\n", getpid());
signal(SIGCHLD, sub_quit_signal_handle);
while()
pause();
} void ChildCycle()
{
printf("create sub process id: %d, parent id: %d\n", getpid(), getppid());
while()
pause();
}

最新文章

  1. Bzoj2957 楼房重建
  2. 【转】 解读EOF
  3. Masonry 布局 cell 高度适应的一种方案(实现类似朋友圈简单布局)
  4. S_ISREG等几个常见的宏 struct stat
  5. ArcGIS Desktop 与 Excel(转)
  6. 20160506-hibernate入门
  7. java与.net比较学习系列(6) 数组
  8. 玩转python之字符串逐个字符或逐词反转
  9. ntp源码解读(一)
  10. POP3是收邮件的协议,SMTP是发邮件的协议,IMAP是一种邮箱通信协议。
  11. 字符串和转为Data类型前后几天
  12. Serializable中的serialVersionUID
  13. mysql 安装部署
  14. java中main函数的String[] args
  15. wsl(Windows Subsystem for Linux)安装简易指南
  16. CF1096. G. Lucky Tickets(快速幂NTT)
  17. python——实例方法、静态方法、类方法、类变量和实例变量浅析
  18. UVa 10054 项链(欧拉回路)
  19. Springmvc之表单验证
  20. struts 页面调用Action的指定方法并传递参数

热门文章

  1. Windbg学习使用
  2. [Asp.net MVC]Asp.net MVC5系列——第一个项目
  3. 面向对象的 CSS (OOCSS)
  4. 在Android工程中运行main函数
  5. 剑指Offer 二进制中1的个数
  6. linux kernel 杂谈
  7. httpclient+Jsoup总结
  8. python suds 一坑
  9. powerdesigner反向
  10. ASP.NET 页生命周期概述