Linux进程概念二

news2024/11/28 18:00:50

我们利用fork函数来辅助我们讲解进程

首先认识两个调用进程地址的函数:getpid(),和getppid(),他们分别可以调用自己的pid和父进程的pid

fork()可以在代码层面来创建子进程,一般而言,父进程fork出来的子进程与父进程代码和数据相同,头文件是<unistd.h>,返回值是get_t:

看到图示的代码和之前理论所说,会发现有很多问题,我们来一一解决:

1,为什么给id返回0的是子进程而返回id大于0的是父进程?

        父进程要对子进程进行管理,也就是权限更大,而子进程无权管辖父进程,所以没必要给子进程返回pid,而父进程因为要管理子进程所以可接收子进程的pid

由图可得知,父进程的pid和子进程的ppid互相对应

在进程fork之后,父进程与子进程的代码是共享的,一般来说不能被修改

但是数据是可以被修改的,原先是和父进程共享同一个数据,但是系统会检查你是否对子进程的数据修改,如果修改了,系统就会触发写时拷贝(往后细说),会把父进程的数据复制下来给子进程修改使用,这也使得子进程具有一定的独立性。

那我们为什么要创建子进程?:为了完成与父进程不一样的工作。

2,理解为什么一个函数会有两个返回值?

一般来说,我们写代码的时候函数return一次之后就会直接退出销毁,为什么fork函数却可以返回两次返回值?

通过上面的知识储备我们知道,fork会创建一个代码共享数据独立的子进程,也就是说在fork创建出一个子进程的时候,这时父进程和子进程会同时运行,并且通过拷贝,父子进程的代码段和数据也是暂时相同,但是我们知道,每个进程都会有自己的pid,父进程创建的子进程也不例外也有自己的pid,同时被cpu进行调度,所以父进程和子进程本质上就是一个代码相同,数据不同的两份程序或代码,本质上也是属于调用了两个函数,所以这就是为什么一个函数会有两个返回值的原因:

3,一个变量为什么会有两个不同的内容?

这个问题可以从前面的讲解中推导出来,在我们对子进程的数据进行写入修改的时候,系统会促发写时拷贝,让子进程的数据与父进程的数据相互独立,修改时互不影响,又因为父进程和子进程本质上就是两个同时运行的代码,所以可以实现一个变量两个不同内容。

4,fork函数究竟在干什么?

综上所述,fork函数的作用就是在运行的时候创建一个子进程,并返回子进程的pid,通过上面的讲解,我们可更深刻的认识到fork的作用与进程的理解。

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

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

相关文章

【Docker】配置文件

问题 学习Docker期间会涉及到docker的很多配置文件&#xff0c;可能会涉及到的会有&#xff1a; /usr/lib/systemd/system/docker.service 【docker用于被systemd管理的配置文件】 /etc/systemd/system/docker.service.d【覆盖配置文件的存放处】 /etc/systemd/system/mul…

[Cocoa]_[初级]_[绘制文本如何设置断行效果]

场景 在开发Cocoa程序时&#xff0c;表格NSTableView是经常使用的控件。其基于View Base的视图单元格模式就是使用NSCell或其子类来控制每个单元格的呈现。当一个单元格里的文字过多时&#xff0c;需要截断超出宽度的文字&#xff0c;怎么实现&#xff1f; 说明 Cocoa下的文本…

【java数据结构】顺序表

【java数据结构】顺序表 一、了解List接口二、顺序表2.1 线性表2.2 顺序表2.2.1 顺序表接口的实现给数组增加新元素判断数组数据是否为满在 pos 位置新增元素判定是否包含某个元素查找某个元素对应的位置获取 pos 位置的元素给 pos 位置的元素设为 value删除第一次出现的关键字…

Manim:使用Python绘制数学动画

Manim是一个由3Blue1Brown的Grant Sanderson开发的开源框架&#xff0c;用户可以通过编写Python代码来创建数学动画&#xff0c;适用于教学、科研和科普宣传等多个领域。 Manim的核心功能之一是动画效果的创建和控制。它提供了多种动画效果&#xff0c;如创建、变换、淡入淡出…

分布式数据库知识详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

QT学习笔记3.1(建立项目、执行_建立第一个工程)

QT学习笔记3.1&#xff08;建立项目、执行_建立第一个工程) 建立第一个工程&#xff0c;使用widget模板 使用的版本是 Qt Creator 4.11.0 Based on Qt 5.14.0 (MSVC 2017, 32 bit) 1.选择Application-》QT Widget Application&#xff08;最常使用&#xff09; 2.项目保存位…

使用Pytorch构建自定义层并在模型中使用

使用Pytorch构建自定义层并在模型中使用 继承自nn.Module类&#xff0c;自定义名称为NoisyLinear的线性层&#xff0c;并在新模型定义过程中使用该自定义层。完整代码可以在jupyter nbviewer中在线访问。 import torch import torch.nn as nn from torch.utils.data import T…

LSM6DSV16X基于MLC智能笔动作识别(2)----MLC数据采集

LSM6DSV16X基于MLC智能笔动作识别.2--MLC数据采集 概述视频教学样品申请源码下载输出速率执行流程速率设置量程设置检测状态数据单位采集数据静止(Steady)闲置(Idle)书写(Writing)其他(other) 概述 MLC 是“机器学习核心”&#xff08;Machine Learning Core&#xff09;的缩写…

全球购的智能引擎:AI与RPA如何重塑跨境电商帝国?

在全球化的大潮中&#xff0c;跨境电商已成为连接世界的桥梁。随着人工智能&#xff08;AI&#xff09;和机器人流程自动化&#xff08;RPA&#xff09;技术的飞速发展&#xff0c;跨境电商领域的运作模式正在经历一场革命性的变革。 一、跨境电商的挑战 随着互联网技术的普及…

D3.js中国地图可视化

1、项目介绍 该项目来自Github&#xff0c;基于D3.js中国地图可视化。 D3.js is a JavaScript library for manipulating documents based on data. It uses HTML, SVG, and CSS to display data. The full name of D3 is "Data-Driven Documents," which means it a…

在VirtualBox中安装OpenEuler操作系统保姆级教程

前言 OpenEuler是一个由中国华为公司主导开发和维护的开源操作系统项目&#xff0c;旨在打造一个开放、可信且可扩展的企业级操作系统&#xff0c;适用于多种应用场景。 该项目致力于通过开放和协作的方式推动操作系统的创新与发展。OpenEuler采用开源软件模型&#xff0c;允…

多模态:Florence2论文详解

文章目录 前言一、介绍二、方法1.模型结构1&#xff09;Vision encoder2&#xff09;Multi-modality encoder decoder3&#xff09;Optimization objective 2.数据工程1&#xff09;Image Collection2&#xff09;Data Annotation3&#xff09;Data filtering and enhancement4…

spring学习日记-day8-声明式事务

一、学习目标 声明式事务是Spring框架提供的一种事务管理方式&#xff0c;其主要特点是通过声明&#xff08;而非编程&#xff09;的方式来处理事务。这种方式让事务管理不侵入业务逻辑代码&#xff0c;从而提高了代码的可维护性和可读性。 定义&#xff1a;声明式事务…

[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算

PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。 图1 PUMA560机器人的各连杆坐标系 表1 PUMA560机器人的连杆参数 用代数法对其进行运动学反解。具体步骤如下: 1、求θ1 PMUMA56

【数据结构笔记13】

408数据结构答题规范 原视频 视频参考&#xff0c;以下为视频的笔记 需要写的部分 如果题目要求了函数名、参数列表、返回值类型就按题目的来 函数的类型可以是返回值类型或者void类型&#xff0c;如果函数名不清楚里面的功能是什么&#xff0c;在函数title下面最好写一行注…

磁盘存储和文件系统管理【1.9】

磁盘存储和文件系统管理【1.9】 12、磁盘存储和文件系统12.1.管理存储12.1.1.新加10G硬盘并识别12.1.2.备份查看MBR分区表二进制信息12.1.3.删除破坏分区表12.1.4.恢复MBR分区表12.1.5.完整步骤12.1.6.fdisk分区12.1.7.gdisk分区12.2.文件系统12.2.1.查看支持的文件系统格式12.…

音视频入门基础:FLV专题(11)——FFmpeg源码中,解析SCRIPTDATASTRING类型的ScriptDataValue的实现

一、引言 从《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中可以知道&#xff0c;根据《video_file_format_spec_v10_1.pdf》第80到81页&#xff0c;SCRIPTDATAVALUE类型由一个8位&#xff08;1字节&#xff09;的Type和一个ScriptDataV…

Java类的生命周期-连接阶段

Java类的生命周期-连接阶段 上篇讲述了类的加载阶段&#xff0c;通过类加载器读取字节码文件后在方法区与堆区生成对应的存放类信息的对象&#xff0c;本篇将讲解他的下一阶段-连接阶段 上篇说到类加载的五大阶段&#xff1a; #mermaid-svg-6YmaEnIO4rCKbIZg {font-family:&quo…

Cpp::STL—vector类的模拟实现(11)

文章目录 前言一、各函数接口总览二、默认成员函数vector();vector(size_t n, const T& val T( ));template< class InputIterator> vector(InputIterator first, InputIterator last);vector(const vector<T>& v);vector<T>& operator(const v…

腾讯云SDK基本概念

本文旨在介绍您在使用音视频终端 SDK&#xff08;腾讯云视立方&#xff09;产品过程中可能会涉及到的基本概念。 音视频终端 SDK&#xff08;腾讯云视立方&#xff09; 应用 音视频终端 SDK&#xff08;腾讯云视立方&#xff09;通过应用的形式来管理您的项目&#xff08;Ap…