fork()函数

刚刚接触Linux,感觉还蛮有意思的,Linux里一切皆文件,没有Windows系统的傻瓜式操作,在Linux里面用指令控制感觉逼格一下上了一个档次,刚刚学习了fork函数,感觉挺值得来写一写的,虽然会写的很烂...

    fork函数用于多进程编程,会产生父子进程,多个进程同时完成N个事务,提高执行效率。

    说白了fork函数就是用来创建进程   pid_t  fork(void)

     注意:fork函数调用一次返回两次(在新创建的进程返回一次,在调用fork的进程(就是原来的进程)返回一次,新进程(子进程)返回0,调用fork的进程(原来的进程即父进程))返回子进程的pid。

    有人肯定会有疑问,为什么返回子进程的pid不返回父进程的pid?

    因为子进程的pid没有函数可以得到,父进程的pid 可以通过ppid()这个函数得到,所以只能在最初获取子进程的pid,所以父进程返回值子进程的pid。

    只是这么说还是很空的,不容易理解,下面写两个例子会帮助理解。

n=fork();  
if(n==0)  
{  
     printf("A\n");  
}  
else  
{  
     printf("B\n");  
}  
运行结果:B A 
 void main()
{
   int i=0;  
   for(;i<2;++i)  
   {  
  if(fork())  
    printf(“A\n”);  
  else  
    printf(“B\n”);  
   }  
}  
运行结果:三个A三个B,但顺序不一定。因为调用父子进程先后每台电脑是不一样,所以顺序并不一定。

fork()函数_第1张图片

void  main()
{
  int  i=0;
      for(; i < 2;i++)
    {
     if(fork)
       printf(“A”);
     else
       printf(“B”);
    }
}
运行结果:四个A四个B,顺序不一定。这个程序和上面那个程序就只差了'\n',但结果就不一样了,是因为结果存储在缓冲区,只有当缓冲区遇到\n才会将结果显示在界面上,否则就等程序运行结束或缓冲区满再显示到界面上。

fork()函数_第2张图片

***需要注意的是父子进程都从fork函数之后的代码开始执行,例如:

if(fork())

{}

else

{}

printf("hhhhh\n");

则结果打印出来不论是父进程还是子进程都会有hhhhh这句。


你可能感兴趣的:(Linux)