1、fork函数原型: pid_t fork( void);
2、fork函数的返回值:
fork函数调用一次,返回两次(在新创建的进程中返回一次,调用fork的新进程返回一次)
可能会有三种返回值:
1)fork在子进程返回0
2)在父进程中返回其子进程的pid
3)如果出错,fork返回-1
3、fork的作用: 复制产生一个新进程,新进程为调用fork函数的这个进程的子进程。
4、父子进程: fork之后,谁先运行,与操作系统的进程调度算法和当前计算机环境相关
父子进程独立,单独执行,运行顺序不唯一
父子进程独立,单独执行,运行顺序不唯一
5、格式:
父进程和子进程都从fork之后的代码开始执行
if(fork()==0)
{子进程执行}
else
{父进程执行}
{子进程执行}
else
{父进程执行}
父子进程都会执行
6、
程序一:
运行结果:AAB
程序执行流程如下:
程序二:
运行结果:AABBAB
程序执行流程如下:
去掉\n的结果:
运行结果:ABBABB
为什么去掉\n会产生这样的结果?这里
主要涉及printf缓冲区的问题。
输出时先放在缓存区,遇到下面四种情况才输出:
1)遇到"\n";
2)fflush(stdout);
3)程序结束(exit或return);
4)缓存区满。