码迷,mamicode.com
首页 > 其他好文 > 详细

理解fork()函数

时间:2015-05-11 18:16:08      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:include

学习 C 语言的进程概念时,会遇到 fork()函数。而遇到时要是有例子,会像下边的样子。执行后双输出。起初见到时,甚为难以理解。

 

我把见到的例子略作修改,以便于我理解这个函数涉及的进程概念。

vim child_process.c

技术分享  

 

gcc child_process.c

./a.out

这里的显示表示运行在父进程中。
[root@h1 chapter 7 进程控制]# 这个显示内容是在子进程中输出的。

echo $?

3

 

---------------------------------------------------------

这个输出结果就是一次运行、两次输出。分别由父进程一次输出、子进程一次输出。而就执行后返回值看,只显示了父进程的返回值。表示子进程的返回值不在终端返回;但是子进程的输出却会在终端返回。(有待验证,至少目前看到的是如此)

 

从代码看,运行到第 9 行时产生子进程。这个时候看到的代码就被复制了一份在另外一个进程空间独立执行。也就是说所谓的子进程就是父进程的“完全克隆”。在父子进程中存在相同的代码,只是具体到父子进程中,相同的代码被执行的代码是相左的。  然而,另外一个函数 vfork() 却不是这样的,一次执行只有一次输出;而且父子进程共享进程资源。


试着延长相应返回值代码的执行时间。再看返回值。

技术分享

 最终返回还是 3 。子进程跟父进程的结束并不存在确定的先后关系。而执行终端的返回却是一定的。


 

本文出自 “小崔的实验笔记” 博客,谢绝转载!

理解fork()函数

标签:include

原文地址:http://sunnybay.blog.51cto.com/2249903/1650284

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!