进程控制-fork函数

一个进程包括代码、数据和分配给进程的资源
fork ()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用 fork ()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

用户数据一样,进程 ID 不一致。
1.fork 函数的返回值
2. 子进程创建成功之后,子进程的执行位置
3. 父子进程的执行顺序 不一定
4. 如何区分父子进程
2.getpid/getppid 函数
getpid: 得到当前进程的 PID
getppid: 得到当前进程的父进程的 PID
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>int main()
{pid_t pid;//定义fork()函数的返回类型pid_t
pid = fork();
if (pid>0)//返回值pid大于0,则为父进程
{
printf("this is father process %d",getpid());}
else if(pid==0)//返回值pid等于0,则为子进程
{printf("this is son  process %d,father process is%d",getpid(),getppid());}
return 0;
}

父子进程间的数据共享
fork 之后两个地址空间区数据完全相同
后续各自进行了不同的操作
父进程: num+400
子进程: num+200
物理地址: i, f_num,s_num
各个进程的地址空间中的数据是完全独立的
对于同一个变量,读时共享
写的时候分别在物理地址上拷贝一份变量进行单独读写
父子进程之间可不可以通过全局变量通信?
不能,两个进程内存不能共享
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>
int i=200;
int main()
{pid_t pid;
pid = fork();
if (pid>0)
{
i+=400;
printf("this is father process %d\n",getpid());printf("i=%d\n",i);
}
else if(pid==0)
{
i+=200;
printf("this is son  process %d,ppid is%d\n",getpid(),getppid());
printf("i=%d\n",i);
}for(int i=0;i<3;i++)
{printf("------i=%d\n",i);
}
return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DatawhaleAI夏令营2024 Task2

#AI夏令营 #Datawhale #夏令营 赛题解析一、Baseline详解1.1 环境配置1.2 数据处理任务理解2.3 prompt设计2.4 数据抽取 二、完整代码总结 赛题解析 赛事背景 在数字化时代&#xff0c;企业积累了大量对话数据&#xff0c;这些数据不仅是交流记录&#xff0c;还隐藏着宝贵的信…

【鸿蒙学习笔记】@Link装饰器:父子双向同步

官方文档&#xff1a;Link装饰器&#xff1a;父子双向同步 目录标题 [Q&A] Link装饰器作用 [Q&A] Link装饰器特点样例&#xff1a;简单类型样例&#xff1a;数组类型样例&#xff1a;Map类型样例&#xff1a;Set类型样例&#xff1a;联合类型 [Q&A] Link装饰器作用…

信号与系统-实验6-离散时间系统的 Z 域分析

一、实验目的 1、掌握 z 变换及其性质&#xff1b;了解常用序列的 z 变换、逆 z 变换&#xff1b; 2、掌握利用 MATLAB 的符号运算实现 z 变换&#xff1b; 3、掌握利用 MATLAB 绘制离散系统零、极点图的方法&#xff1b; 4、掌握利用 MATLAB 分析离散系统零、极点的方法&a…

字符串中的注意事项

在比较早的C/C版本中&#xff0c;经常可以看到推荐使用gets函数来进行整行字符串的输入&#xff0c;就像下面这样的简单写法即可输入一整行&#xff1a; C gets(str);但是当输入的字符串长度超过数组长度上限MAX_LEN时&#xff0c;gets函数会把超出的部分也一并读进来&#x…

MySQL基础篇(二)字符集以及校验规则

在MySQL基础篇&#xff08;一&#xff09;中&#xff0c;我们知道了如何创建数据库&#xff0c;这篇文章带大家了解创建的一些细节。 红色框&#xff1a;可省略&#xff0c;作用如果存在相同的数据库名称&#xff0c;就不会再创建&#xff0c;反之&#xff0c;创建。 蓝色框&…

uniapp 封装请求

新建request文件夹 下新建index.js 和index.js 或者创建units文件放入index.js 和api文件夹放入index.js(api.js)//看公司规范 1. index.js // 全局请求封装 // const base_url http://localhost:8080/devapi var base_url process.env.NODE_ENV development ? http://…

可用于多个微信管理的神器

以下仅是多微信聚合聊天管理界面&#xff1a; 可以在一个页面上同时收发多个微信的消息&#xff0c;可以添加好友&#xff0c;通过好友请求。 可以修改昵称&#xff0c;不受字数限制。 可以将常用图片&#xff0c;文件等放入素材库&#xff0c;方便聊天时查找和发送。 可以设置…

速盾:cdn 缓存图片

现如今&#xff0c;互联网已经成为我们日常生活中不可或缺的一部分。在我们使用互联网时&#xff0c;经常会遇到图片加载缓慢、文章打开慢等问题。为了解决这些问题&#xff0c;CDN&#xff08;内容分发网络&#xff09;应运而生。CDN 是一种通过将数据缓存在世界各地的服务器上…

集群环境下,调用半数以上节点进行数据同步的实现

核心实现是使用CountDownLatch来实现的&#xff0c;先取集群节点总数一半以上数量的CountDownLatch 再发送请求调用其他节点&#xff0c;在这个过程中对于正常响应的节点进行latch.countDown(); 最后再统计数量是否为0再决定是否抛异常 // 请求参数final String content jso…

Java:封装

文章目录 一、概念二、实现三、测试四、总结 一、概念 在面向对象编程中&#xff0c; 封装从字面上来理解就是包装的意思&#xff0c;特点就是信息隐藏&#xff0c;防止该类的代码和数据被外部类的代码随机访问。 封装的优点&#xff1a; 良好的封装能够减少耦合。 统一接口…

搜索旋转数组

题目链接 搜索旋转数组 题目描述 注意点 数组已被旋转过很多次数组元素原先是按升序排列的若有多个相同元素&#xff0c;返回索引值最小的一个 解答思路 首先需要知道的是&#xff0c;本题数组中的旋转多次只是将头部的某些元素移动到尾部&#xff0c;所以不论怎么旋转&am…

uni-app怎样使用组件

在uni-app中使用组件&#xff0c;主要遵循以下几个步骤&#xff1a; 创建组件文件&#xff1a;在UniApp项目中创建一个新的组件&#xff0c;通常将组件文件保存在components文件夹下。如果components文件夹不存在&#xff0c;需要先创建它。然后在components文件夹下创建一个新…

Pycharm python解释器 unsupported python 3.1 解决

Pycharm 环境 unsupported python 3.1解决 1. 问题重现2. 原因分析3. 解决方法 1. 问题重现 之前使用Pycharm 2024.1.1的时候&#xff0c;环境配置的Python 3.11.9&#xff0c;现在改成使用Pycharm 2020.2.2&#xff0c;结果Python解释器显示“unsupported python 3.1”&#…

Java ORM框架FastMybatis踩坑

Java ORM框架FastmyBatis踩坑 问题&#xff1a;使用了FastmyBatis的saveOrUpdate方法&#xff0c;明明设置了主键的值且表中存在&#xff0c;但是依然执行insert操作。导致Duplicate PK。 原因&#xff1a;使用了其他第三方包的注解指定表的主键&#xff0c;没有按照FastmyBat…

低音炮内存卡格式化后无法播放音乐文件

试了多次 不支持ntfs不支持exfat 仅支持fat32 FAT32与exFAT的区别主要体现在来源、单个文件限制、适用情况以及兼容性方面。12 来源&#xff1a; FAT32是Windows平台的传统文件格式&#xff0c;首次在Windows 95第二版中引入&#xff0c;旨在取代FAT16&#xff0c;具有良好的…

自动驾驶中的逆透视变换(Inverse Perspective Mapping,IPM)详解

前言 IPM(Inverse Perspective Mapping,逆透视变换)图的历史可以追溯到计算机视觉和图像处理领域的发展。逆透视变换是一种用于消除图像中透视效应的技术,使得原本由于透视产生的形变得以纠正,进而更准确地描述和理解图像中的场景。比如在行车中的车道线检测,泊车中的常见…

陈志泊主编《数据库原理及应用教程第4版微课版》的实验题目参考答案实验2

实验目的 1&#xff0e;掌握在SQL Server中使用对象资源管理器和SQL命令创建数据库与修改数据库的方法。 2&#xff0e;掌握在SQL Server中使用对象资源管理器或者SQL命令创建数据表和修改数据表的方 法&#xff08;以SQL命令为重点&#xff09;。 实验设备 操作系统:Win11…

使用Source Insight 4.0

一、使用书签 二、添加文件 三、Search 3.1 替换所有变量 四、右键查询 4.1 查看被调用的地方

Linux上脚本备份数据库(升级版)

直接上代码&#xff1a; #!/bin/bash# 配置部分 mysql_user"root" mysql_host"localhost" mysql_port"3306" mysql_charset"utf8mb4" mysql_defaults_file"/home/mysql/mysql_back/.my.cnf"backup_base_dir"/mnt/sdd/…

GRPC使用之HelloWorld

使用grpc的好处是提供高效的序列化能力&#xff0c;能够跨语言进行调用。这一节我们来学习grpc的入门应用&#xff0c;整篇文章分成3部分: 接口定义&#xff0c;使用grpc的IDL&#xff0c;创建proto文件&#xff0c;编译/生成grpc文件服务端开发&#xff0c;处理客户端请求&am…