您的位置:首页 > 其它

理解fork()函数

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

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


gcc child_process.c
./a.out
这里的显示表示运行在父进程中。
[root@h1 chapter 7 进程控制]# 这个显示内容是在子进程中输出的。
echo $?
3
---------------------------------------------------------
这个输出结果就是一次运行、两次输出。分别由父进程一次输出、子进程一次输出。而就执行后返回值看,只显示了父进程的返回值。表示子进程的返回值不在终端返回;但是子进程的输出却会在终端返回。(有待验证,至少目前看到的是如此)

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

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


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




本文出自 “小崔的实验笔记” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: