理解fork()函数

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

 

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

vim child_process.c

wKioL1VQYZzjBJAOAAFCjnDCTb8566.jpg  

 

gcc child_process.c

./a.out

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

echo $?

3

 

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

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

 

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


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

wKiom1VQZ_LjXerIAAIKZc2NV7U714.jpg

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


 


wKiom1YbpuWiRQ3yAABm5lAGjro733.jpg

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

你可能感兴趣的:(函数,include,fork)