全部学习汇总: https:///GreyZhang/little_bits_of_linux

         今天看一下fork函数,在C编程中这是我距离linux内核最近的一次吧!之前,linux的很多东西其实都是只停留在网络文章甚至说新闻的层面,没有任何实操。

         前阵子我还在看linux早期的内核代码,但是看着看着开支转向了先了解一部分linux C编程。因为看代码的过程中,我发现需要补充的东西太多。

         关于fork,其实是进程创建的一个手段。先看看我抄来的一个例子:

517_linux C编程中的fork函数_linux

         软件的编译运行效果;

517_linux C编程中的fork函数_linux_02

         代码中调用了前面小结过的sleep函数,因此,在最后面两行打印的期间其实是有一个2秒钟的延时的。

         结合之前看过的现成的基础的知识,可以看得出:第一次打印,线程PID是2769,线程的父进程是2768。而2768的正好是第二次打印的线程的PID。也就是说,两次打印,第二次是在主进程里面,而第一次应该是在新创建的进程里面。

         关于fork,做一部分小结:

  1. 父子进程的代码段以及数据段完全一样;
  2. 子进程是由内核调度来激活的,从fork函数开始执行。之后,子进程执行主进程fork函数之后的语句。
  3. fork被调用一次,返回两次。原因其实就在于第二点。两次的返回值是不同的,子进程返回0,主进程返回的是创建出来的进程的PID。可以根据这个,判断进程的属性。
  4. 父子进程谁先执行是不确定的。

不过,按照上面的几条可以确定,在这个例子当中,子进程基本是先执行的。因为,主进程有一个2秒钟的延时。