博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vfork
阅读量:2242 次
发布时间:2019-05-09

本文共 807 字,大约阅读时间需要 2 分钟。

vfork

fork后父进程和子进程通过自己的地址空间和页表看到自己的物理地址上的代码和数据,而vfork子进程和父进程共享一份地址空间结合页表映射到同物理内存上

如何证明

#include 
#include
#include
#include
#include
#include
#include
int main() { pid_t id = vfork(); if (0 == id){ //child printf("child: pid = %d, ppid = %d\n", getpid(), getppid()); sleep(1); exit(1); }else{ //father printf("father: pid = %d, ppid = %d\n", getpid(), getppid()); } return 0; }

1

我们可以看到子进程打印自己的pid和ppid后sleep了一秒,如果是fork则先打印父进程,而后才是子进程,但现在如果先打印子进程,子进程exit后,再打印父进程则得以证明,vfork是子进程在父进程的地址空间里面运行。

再来看一个例子 
如果在定义一个全局变量g_value然后在child里面将g_value赋值成100平打印其值和地址,最后在father中也做同样的事,我们看看会发生什么

g_value

结果是肯定的,打印的g_value是相同的,这就证明了用vfork使子进程在父进程的地址空间中运行。所以这里的子进程其实是一个线程。 
线程:比进程的执行度更细,线程是在进程内部运行的分支,一个进程可以有多个线程。在本例中这个子进程就相当于线程。

你可能感兴趣的文章
java jackcess 操作 access
查看>>
Git问题Everything up-to-date解决
查看>>
Hadoop HDFS文件操作的Java代码
查看>>
Hadoop学习笔记—3.Hadoop RPC机制的使用
查看>>
Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
查看>>
JTS Geometry关系判断和分析
查看>>
GIS基本概念
查看>>
Java文件操作①——XML文件的读取
查看>>
java学习总结之文件操作--ByteArrayOutputStream的用法
查看>>
Java生成和操作Excel文件
查看>>
Java的三种代理模式
查看>>
java静态代理与动态代理简单分析
查看>>
JTS Geometry关系判断和分析
查看>>
阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
查看>>
Intellij IDEA 使用技巧一
查看>>
IDEA 护眼色设置 背景行颜色取消等设置
查看>>
idea如何显示git远程与本地的更改对比?
查看>>
Git 分支 - 分支的新建与合并
查看>>
git创建与合并分支
查看>>
23种设计模式介绍以及在Java中的实现
查看>>