学习分享:fork函数与vfork函数的区别
一、fork函数
(一)fork函数头文件
#include <sys/types.h>
#include <unistd.h>
(二)fork函数原型
pid_t fork(void);
(三)fork函数的作用
通过复制正在调用的进程来创建一个新的进程,这个新的进程被称为子进程。
(四)返回值
父进程:返回子进程id
子进程:返回0
错误:返回-1
(五)用法展示
#include <strings.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{ pid_t pid = fork();//创建子进程if(pid == -1){perror("fork");return -1;} //判断是否创建成功if(pid == 0) //返回0则为子进程{printf("the child id is:%d,the parent id is:%d\n",getpid(),getppid());}else //否则为父进程{printf("the parent id is:%d,my parent id is:%d",getpid(),getppid());}return 0;
}
二、vfork函数
(一)vfork函数头文件
#include <sys/types.h>
#include <unistd.h>
(二)vfork函数原型
pid_t vfork(void);
(三)vfork函数的作用
vfork函数拥有跟fork函数一样用于创建子进程的作用,但是vfork并不拷贝父进程的叶表
(四)返回值
父进程:返回子进程id
子进程:返回0
错误:返回-1
(五)用法展示
#include <strings.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{ pid_t pid = vfork();//创建子进程if(pid == -1){perror("vfork");return -1;} //判断是否创建成功
#include <strings.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{ pid_t pid = fork();//创建子进程if(pid == -1){perror("fork");return -1;} //判断是否创建成功if(pid == 0) //返回0则为子进程{printf("the child id is:%d,the parent id is:%d\n",getpid(),getppid());}else //否则为父进程{printf("the parent id is:%d,my parent id is:%d",getpid(),getppid());}return 0;
} return 0;
}
(三)区别
vfork不将父进程中的地址空间完全复制到子进程,仅与父进程共享数据段,fork函数父子进程的运行次序是不确定的,而vfork函数保证了子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。
学习分享:fork函数与vfork函数的区别相关推荐
- fork()函数与vfork()函数的区别
1.fork()函数与vfork()函数 头文件: #include <sys/types.h> #include <unistd.h> 函数原型: pid_t fork(vo ...
- linux中fork函数与vfork函数的区别
fork函数跟vfork函数一样能够创建进程,它们主要有两个区别 (1)区别一: vfork直接使用父进程存储空间,不拷贝. (2)区别二: vfork保证子进程先运行,当子进程调用exit退出后,父 ...
- linux中fork()函数与vfork()函数的区别
对于fork函数: 子进程只继承父进程的文件描述表,不继承但共享文件表项和i-node 父进程创建一个子进程之后,文件表项中的引用计数加1变为2,当父进程作close操作之后计数器减1,子进程还是可以 ...
- linux创建进程fork函数和vfork函数
#include <unistd.h>pid_t fork(void);#include <sys/types.h>#include <unistd.h>pid_t ...
- fork函数与vfork函数的区别
系统调用fork(),vfork()的区别: fork():无参数,资源全部复制,父进程所有的资源都全部通过数据结构的复制,传递给子进程. vfork():无参数,除了task_struct结构和系统 ...
- fork()函数与vfork()函数的区别。
fork()函数: 1. fork()在进程1中创建进程2.在创建时是将进程1的所有资源拷贝到了进程2. 2. 子进程独立于父进程,有各自独立的地址空间.进程执行先后顺序不确定. 代码举例: #inc ...
- python实用性函数分享_17.【Python学习分享文章】function(函数)1
综述 - 作用 将会重复使用的代码片段,进行打包处理,封装成一个模块,之后使用的时候就调用函数的名字就可以全部使用函数里面所有的代码. 目的:精简代码可读性(函数的名字可以符合生活逻辑).修改性(修改 ...
- Matlab学习分享(4) (匿名函数)
1.生成[min,max]之间的随机(整数)数矩阵 min和max为用户输入:行列数为用户输入: 小数或整数由用户指定:最后输出结果(如果使每次输出的结果相同?) if-else rand randi ...
- 4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()
1fork()函数 子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同.fork调用一次返回两次,有以下特点: A:父进程中返回子进程ID B:子进程中返回0 C:读时共享,写时 ...
最新文章
- bzoj千题计划303:bzoj4827: [Hnoi2017]礼物
- python代码基础题-python每日经典算法题5(基础题)+1(中难题)
- ps高级磨皮的7个步骤
- QT界面操作1:如何跟踪鼠标位置?
- Python实现字符串反转的几种方法
- delphi frame 添加 create onshow 事件
- idea配置Maven的本地仓库(打开新的项目时自动更新本地仓库的位置)
- python判断语句的复杂度_Python内置方法的时间复杂度(转)
- 【英语学习】【Level 08】U05 Better option L3 Everything's a click away
- VSCode Editing Code
- Sql server备份数据库不执行
- 「 数学模型 」“使用SPSS软件线性回归分析”实例
- 笔记本html外接显示器,笔记本怎么外接显示器?XP笔记本外接显示器的方法
- 网页布局颜色搭配布局总结
- 计算机检测不到蓝牙,图解Win10 1809系统中检测不到蓝牙设备的方法
- 教你怎样用安全网关消灭蠕虫病毒(转)
- 企业六大要素指标采集—人财物
- 【产品经理】产品经理的日常工作
- 3. adb常用命令
- python导入excel类库_Python实现的Excel文件读写类
热门文章
- html 图片轮播实例,简单实现轮播图效果的实例
- 档案管理系统软件测试用例,在线考试系统软件测试用例报告
- 简单粗暴 |土地利用遥感影像处理(从数据下载到ENVI与ArcGIS结合)
- 2018年5月软考网络工程师上午真题知识点总结
- 关于网络命令 ping 你了解多少
- 贪心+set--luogu P3540 [POI2012]SQU-Squarks
- 2.1数据处理安全:文件加密
- 东北大学计算机组成原理答案,东北大学计算机组成原理课程设计.doc
- 用NI的数据采集卡实现简单电子测试之4——半导体温度传感器
- 微型计算机原理及应用马义德,微型计算机原理及应用.doc