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

unix中的vfork函数

一、前言

本文介绍unix中的vfork函数,vfork函数功能和fork函数类似,也是用于创建新的进程,只不过调用vfork函数创建的子进程将共享父进程的进程空间,且只有当子进程调用exec()或者exit()函数后,父进程才会继续运行。

二、vfork

vfork的函数原型如下:

#include <unistd.h>
pid_t vfork(void);

参考代码如下:

/*************************************************************************> File Name: vfork_test.c> Author: conbiao> Created Time: 2024年09月23日 星期一 20时01分32秒************************************************************************//************************************************************************                             HEADER**********************************************************************/
#include <stdio.h>
#include <unistd.h>/************************************************************************                              MACRO**********************************************************************//************************************************************************                          GLOBAL VARIABLE**********************************************************************//************************************************************************                       FUNCTION DESCRIPTION**********************************************************************//***********************************************************************
* FUNCTION NAME:***********************************************************************
*
* Summary:
*
* Params:
*
* Return:
*
***********************************************************************//************************************************************************                                MAIN**********************************************************************/
int main(int argc, char *argv[])
{int ret = 0;int num = 10;pid_t pid;printf("%s: start!\n",__func__);if((pid = vfork()) < 0){printf("%s: fork fail!\n",__func__);}else if(pid == 0){printf("%s: This is child process!\n",__func__);num += 10;_exit(0);}else{printf("%s: This is parent procee,child's pid is: %d\n",__func__,pid);}printf("%s: num = %d\n",__func__,num);return ret;
}

运行结果如下:
在这里插入图片描述

(2-1)
如上图所示,子进程修改的num会改变父进程的num,因为子进程共享了父进程的进程空间。

参考资料:

《UNIX环境高级编程(第3版) (史蒂文斯 (W.Richard Stevens) 拉戈 (Stephen A.Rago))(Z-Library)》

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

相关文章:

  • Android 用线程池实现一个简单的任务队列(Kotlin)
  • 遨游信息技术的浩瀚宇宙:探索MySQL的深邃奥秘
  • 【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)
  • 【AI创作组】工程方向的硕士研究生学习Matlab的路径
  • Mac使用Nginx设置代理,并禁用自带Apache
  • AlmaLinux 安裝JDK8
  • Set 和 Map 的模拟实现
  • 深度学习自编码器 - 预测稀疏分解(PSD)篇
  • 如何检测出来这个ip是共享ip不安全
  • TMStarget学习——T1 Segmentation数据处理及解bug
  • 锁策略, cas 和 synchronized 优化过程
  • 【HTML5】html5开篇基础(2)
  • 大数据新视界 --大数据大厂之 Reactjs 在大数据应用开发中的优势与实践
  • 【论文阅读笔记】TOOD: Task-aligned One-stage Object Detection
  • 类中的特殊内容
  • network request to https://registry.npmjs.org/xxx failed, reason: connect ETIM
  • MQ入门(二):java客户端SpringAMQP
  • 软技能与AI技术的融合
  • 在视频上绘制区域:使用Vue和JavaScript实现交互式画布
  • 31. RabbitMQ顺序消费
  • BERT-BiLSTM-CRF模型实战
  • npm 安装 与 切换 淘宝镜像
  • 在Windows系统上安装的 Arrow C++ 库
  • 格雷母线电缆头安装方法视频-武汉正向科技
  • 统信服务器操作系统【Cron定时任务服务】
  • 微前端中的路由加载流程
  • Axure大屏可视化模板:跨领域数据分析平台原型案例
  • 机器学习(1)——线性回归、线性分类与梯度下降
  • 完整的端到端的中文聊天机器人
  • 【有啥问啥】Stackelberg博弈方法:概念、原理及其在AI中的应用