unix中的vfork函数

embedded/2024/9/23 22:07:35/

一、前言

本文介绍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.ppmy.cn/embedded/115784.html

相关文章

LeetCode 面试经典150题 67.二进制求和

415.字符串相加 思路一模一样 题目&#xff1a;给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 eg&#xff1a; 输入a“1010” b“1011” 输出“10101” 思路&#xff1a;从右开始遍历两个字符串&#xff0c;因为右边是低位先运算。如果…

Jsonpath - 数据中快速查找和提取的强大工具

JSON&#xff08;JavaScript Object Notation&#xff09;在现代应用程序中广泛使用&#xff0c;但是如何在复杂的JSON数据中 查找和提取所需的信息呢&#xff1f; JSONPath是一种功能强大的查询语言&#xff0c;可以通过简单的表达式来快速准确地定位和提取JSON数据。本文将介…

乐观锁、悲观锁及死锁

乐观锁、悲观锁 1.概念 悲观锁(悲观锁定)&#xff1a;具有强烈的独占和排他特性。在整个执行过程中&#xff0c;将处于锁定状态。悲观锁在持有数据的时候总会把资源或者数据锁住&#xff0c;这样其他线程想要请求这个资源的时候就会阻塞&#xff0c;直到等到悲观锁把资源释放为…

CleanClip --- 为Mac用户打造的智能剪贴板管理利器

CleanClip是一款专为Mac用户设计的强大剪贴板管理工具&#xff0c;旨在提升用户的工作效率和数据管理体验。它通过智能化的剪贴板内容管理&#xff0c;实现了Mac系统与用户操作之间的无缝衔接。CleanClip支持多种连接方式&#xff0c;包括系统级的快捷操作和自定义快捷键&#…

【Kubernetes】常见面试题汇总(二十三)

目录 69.考虑一家拥有分布式系统的跨国公司&#xff0c;拥有大量数据中心&#xff0c;虚拟机和许多从事各种任务的员工。您认为这样公司如何以与 Kubernetes 一致的方式管理所有任务&#xff1f; 70.考虑一种情况&#xff0c;即公司希望通过维持最低成本来提高其效率和技术运营…

基于python+django+vue的影视推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的影…

【软件工程】可行性研究

一、目的 二、任务 三、步骤 四、结果&#xff1a;可行性研究报告 例题 选择题

计算机信息系统安全保护等级

计算机信息系统安全保护等级划分准则是我国关于计算机信息系统安全保护的重要标准&#xff0c;它规定了计算机信息系统安全保护能力的五个等级。这一准则由国家公安部提出并组织制定&#xff0c;国家质量技术监督局发布&#xff0c;并于2001年1月1日正式实施。以下是关于这五个…