当前位置: 首页 > news >正文

Linux--进程--vfork与fork区别

vfork:

所需头文件:
#include <sys/types.h>

#include <unistd.h>

pid_t vfork(void);
功能:

vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程,但它们创建的子进程是有区别的。

参数:

返回值:

成功:子进程中返回 0,父进程中返回子进程 ID。pid_t,为无符号整型。

失败:返回 -1。

与fork区别:

1.fork(): 父子进程的执行次序不确定。

   vfork():保证子进程先运行,在它调用 exec(进程替换) 或 exit(退出进程)之后父进程才可能被调度运行。

2.fork(): 子进程拷贝父进程的地址空间,子进程是父进程的一个复制品。

   vfork():子进程共享父进程的地址空间(准确来说,在调用 exec(进程替换) 或 exit(退出进程) 之前与父进程数据是共享的)

总结:vfork先运行子进程,遇到exit退出运行父进程;

            fork父子进程争夺先后运行次序


代码:

注意退出子进程要用exit函数,不然会破坏内存;造成data错误

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>int main()
{pid_t pid;int fd = 0;int data = 0;while(1){printf("please input data,1 creats child process\n");scanf("%d",&data);if(data == 1){fd = fork();if(fd==0){while(1){printf("do net request,pid = %d\n",getpid());sleep(2);}}}else {	printf("do nothing  wait please \n");}}return 0;
}

结果:

http://www.lryc.cn/news/158851.html

相关文章:

  • Ubuntu系统重装nvidia gpu驱动
  • Java + Selenium + Appium自动化测试
  • 【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单
  • 2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析
  • 一、Linux下常用的压缩格式
  • MySQL 查询 - 排除某些字段的SQL查询,提升查询性能
  • 国产信创服务器如何进行安全可靠的文件传输?
  • ARTS第五周:S - 数据编织 Data fabric
  • 基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程
  • Spring Boot 介绍
  • mysql基于AES_ENCRYPTAES_DECRYPT实现密码的加密与解密
  • 怎么把pdf转换成jpg图片?
  • 计算机脚本的概念,如何编写、使用脚本 (Script)?
  • c语言 5.0
  • 如何配置远程访问以在外部网络中使用公司内部的OA办公系统——“cpolar内网穿透”
  • 【AI】机器学习——线性模型(线性回归)
  • 智能小车之跟随小车、避障小车原理和代码
  • 行业追踪,2023-09-07
  • Qt creator中项目的构建配置和运行设置
  • 蓝桥杯打卡Day3
  • Linux系统编程--IO
  • 亚马逊云科技通过生成式AI,帮助清华RIOS加速计算和分析的处理效率
  • 全志T113-S3入门资料汇总(避坑指南)一
  • 3dMax全球学习资源、资源文件和教程 !
  • API接口是什么?有哪些免费的API接口?
  • USB Server应用于汇丰晋信基金
  • [BSidesCF 2019]Kookie 1 , cookie伪造
  • 如何查看MySQL的安装位置
  • ui设计岗位招聘要求有哪些? 优漫动游
  • Swift报错:“‘nil‘ is incompatible with return type ‘User‘”