unix中的vfork函数

ops/2024/9/24 1:56:51/

一、前言

本文介绍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/ops/115063.html

相关文章

如何上传tauri项目到csdn gitcode

如何上传tauri项目到csdn gitcode 首先保证项目目录有.gitignore&#xff0c;避免不必要的文件上传分享。 gitignore文件 # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log*node_modules dist dist-ssr *.local# Editor …

828华为云征文|华为云Flexus云服务器X实例部署Xnote笔记应用

828华为云征文&#xff5c;华为云Flexus云服务器X实例部署Xnote笔记应用 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Note Mark 介绍2.1 Xnote简介2.2 Xnote特点2.3 主要使用场景 三、本次实…

2024 vue3入门教程:02 我的第一个vue页面

1.打开src下的App.vue&#xff0c;删除所有的默认代码 2.更换为自己写的代码&#xff0c; 变量msg&#xff1a;可以自定义为其他&#xff08;建议不要使用vue的关键字&#xff09; 我的的第一个vue&#xff1a;可以更换为其他自定义文字 3.运行命令两步走 下载依赖 cnpm i…

SpringBoot使用@Async注解,实现异步任务

1.直接在方法上加Async注解&#xff0c;标明为异步任务&#xff1a; Component public class MyAsyncTask {Asyncpublic void asyncImportTask(String jsonList){//...具体业务逻辑//从redis缓存中查询数据(使用若依框架自带的redis方法)Data redisData RedisUtils.getCacheO…

828华为云征文 | 将Vue项目部署到Flexus云服务器X实例并实现公网访问

一、Flexus云服务器X实例简介 1.1 概述 华为云Flexus X实例是华为云推出的一款创新云服务器产品&#xff0c;它主要面向中小企业和开发者&#xff0c;旨在解决传统云服务中的痛点&#xff0c;提供更加灵活、高效的云服务体验。 华为深刻洞察了中小企业和开发者在云服务应用中遇…

C语言中的assert断言

Assert断言 断言是程序中处理异常的一种高级形式。可以在任何时候启用和禁用断言验证&#xff0c;因此可以在测试时启用断言&#xff0c;而在部署时禁用断言。同样&#xff0c;程序投入运行后&#xff0c;最终用户在遇到问题时可以重新启用断言。 用法&#xff1a; #…

Vite + Vue + TypeScript 项目搭建总结

1. 初始项目 官网地址&#xff1a;Vite | 下一代的前端工具链 1.1 项目搭建 pnpm create vite然后按照提示操作&#xff0c;这里选择的是 Vue TypeScript&#xff0c;生成的目录结构如下 ├── .vscode │ └── extensions.json ├── public │ └── vite.svg …

linux-系统备份与恢复-备份工具

Linux 系统备份与恢复&#xff1a;备份工具 备份和恢复是 Linux 系统管理中的关键任务之一。有效的备份策略可以在数据丢失、系统崩溃或硬件故障时&#xff0c;帮助管理员快速恢复系统&#xff0c;避免数据丢失带来的严重后果。Linux 提供了多种备份工具&#xff0c;支持不同的…