/***
fork_test.c
***/
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h> int main()
{
pid_t pid;
printf("xxxxxxxx\n"); pid = fork();
if(- == pid)
{
perror("fork error:");
exit();
}
else if(pid == )
{
printf("I'm child,pid = %u,ppid = %u\n",getpid(),getppid());
}
else
{
printf("I'm parent,pid = %u, ppid = %u\n",getpid(),getppid());
sleep();
}
printf("YYYYYYYYYYY\n");
return ;
}

运行结果:

ubuntu1604@ubuntu:~/wangqinghe/C/20190805$ ./fork_test

xxxxxxxx

I'm parent,pid = 2610, ppid = 2558

I'm child,pid = 2611,ppid = 2610

YYYYYYYYYYY

YYYYYYYYYYY

循环创建N个子进程:

使用for循环创建五个子进程:

/***
fork_test.c
***/
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h> int main()
{
int i;
pid_t pid;
printf("xxxxxxxx\n"); for(i = ; i < ; i++)
{
pid = fork();
if(- == pid)
{
perror("fork error:");
exit();
}
else if(pid == )
{
printf("I'm child,pid = %u,ppid = %u\n",getpid(),getppid());
}
else
{
printf("I'm parent,pid = %u, ppid = %u\n",getpid(),getppid());
sleep();
}
}
printf("YYYYYYYYYYY\n");
return ;
}

运行程序后却创建了2^5-1个子进程。

问题分析:

问题解决:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h> int main()
{
int i;
pid_t pid;
printf("xxxxxxxx\n"); for(i = ; i < ; i++)
{
pid = fork();
if(pid == )
{
break;
}
} if(i < )
{
sleep(i);
printf("I'm %d child,pid = %u\n",i+,getpid()); }
else
{
sleep(i);
printf("I'm parent\n"); }
return ;
}

在子进程pid == 0 时直接break出来就好了。

运行结果:

ubuntu1604@ubuntu:~/wangqinghe/C/20190805$ make fork_test

gcc fork_test.c -o fork_test -Wall -g

ubuntu1604@ubuntu:~/wangqinghe/C/20190805$ ./fork_test

xxxxxxxx

I'm 1 child,pid = 3157

I'm 2 child,pid = 3158

I'm 3 child,pid = 3159

I'm 4 child,pid = 3160

I'm 5 child,pid = 3161

I'm parent

最新文章

  1. .NET单元测试的艺术-1.入门
  2. selenium python 安装
  3. linux多文本替换内容
  4. windows php swoole 安装
  5. 手把手教你如何加入到github的开源世界!
  6. git命令大全
  7. nginx下使用memcache
  8. hdu 1869 (Floyd)
  9. OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换
  10. tomcat简介及原理解说
  11. jquery ui autoComplete自动完成
  12. STM32学习笔记——DMA控制器(向原子哥学习)
  13. Css3做的旋转显示文字和角度的变化
  14. ios swift(1)冒泡排序
  15. [Linked List]Partition List
  16. hdu_5961_传递(bitset)
  17. 设计模式的征途—15.观察者(Observer)模式
  18. 百度ip定位城市接口调用
  19. Java中枚举的使用
  20. 皮皮虾FAQ

热门文章

  1. 音视频入门-03-RGB转成BMP图片
  2. (八)Activiti之流程变量和局部流程变量
  3. Android 集成 支付宝支付
  4. C#常用数据结构
  5. Angular 调试
  6. EDK2开发环境搭建
  7. 基于【 Docker】二 || Docker的入门安装
  8. babel-plugin-transform-remove-strict-mode
  9. JavaScript--关于闭包(closure)
  10. Android获取设备唯一码