学习 C 语言的进程概念时,会遇到 fork()函数。而遇到时要是有例子,会像下边的样子。执行后双输出。起初见到时,甚为难以理解。
我把见到的例子略作修改,以便于我理解这个函数涉及的进程概念。
vim child_process.c
gcc child_process.c
./a.out
这里的显示表示运行在父进程中。 [[email protected] chapter 7 进程控制]# 这个显示内容是在子进程中输出的。 |
echo $?
3 |
---------------------------------------------------------
这个输出结果就是一次运行、两次输出。分别由父进程一次输出、子进程一次输出。而就执行后返回值看,只显示了父进程的返回值。表示子进程的返回值不在终端返回;但是子进程的输出却会在终端返回。(有待验证,至少目前看到的是如此)
从代码看,运行到第 9 行时产生子进程。这个时候看到的代码就被复制了一份在另外一个进程空间独立执行。也就是说所谓的子进程就是父进程的“完全克隆”。在父子进程中存在相同的代码,只是具体到父子进程中,相同的代码被执行的代码是相左的。 然而,另外一个函数 vfork() 却不是这样的,一次执行只有一次输出;而且父子进程共享进程资源。
试着延长相应返回值代码的执行时间。再看返回值。
最终返回还是 3 。子进程跟父进程的结束并不存在确定的先后关系。而执行终端的返回却是一定的。
时间: 2024-10-12 07:49:56