操作系统 之 fork 函数 典例篇

本文探讨了fork函数在创建子进程过程中的应用,分析了不同进程的PID和PPID关系,指出在某些系统中子进程可能先于父进程执行,并通过一个经典笔试面试题解析了printf缓冲区的工作原理。
摘要由CSDN通过智能技术生成

【1】不算main这个进程自身,到底创建了多少个进程啊?

int main(int argc, char* argv[])
{
   fork();
   fork() && fork() || fork();
   fork();
}
【解析】只看这句, fork() && fork() || fork(); 结果有5个进程。第一句 ,fork 后进程加倍,所以执行 fork() && fork() || fork() 后有10个进程。最后一句进程加倍,就是20个  减去主进程,结果共有 19个。

【2】再看一下两个例子的对比

#include<unistd.h>  
#include<stdio.h>  
#include<stdlib.h>  
int main(int argc, char ** argv )  
{  
         int i;  
         for(i = 0;i < 2;i++)  
         {  
               fork();  
               printf("%d\n",i);  
         }  
}  
然后我们编译执行,执行的结果是
0  
1  
1  
0  
1  

为了便于分析,我们每次都输出当前进程的ppid(父进程)以及当前进程的pid

#include<unistd.h>  
#include<stdio.h>  
#include<stdlib.h>  
int main(int argc, char ** argv )  
{  
         int i;  
         for(i = 0;i < 2;i++)  
         {  
               fork();  
               printf("%d PPID:%d PID:%d\n",i,getppid(),getpid());  
         }  
}  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值