子进程的创建 ─── linux第10课

embedded/2025/2/28 6:32:06/

目录

进程 = 内核数据结构+代码和数据

fork 创建子进程

​编辑

创建多进程

理解子进程的创建(总结)


进程 = 内核数据结构+代码和数据

一个进程只有一个唯一父进程,但可以拥有多个子进程,因此进程是树形结构.

fork 创建子进程

父子进程代码共享,数据各自私有的原因

因为数据私有可以通过此特性来控制不同子程序(利用了fork的返回值)

下面是fork函数的返回值说明

如果创建成功 给父进程返回子进程的PID ,给子进程返回0

        创建失败给父进程返回-1 ,没有子进程

fork函数之后会有两个分支(父与子) 执行fork之后的代码

可以通过fork给父子进程数据各自私有的特性( fork返回值的不同 ),对下面的代码进行分流

创建多进程

理解子进程的创建(总结)

  •         fork函数内部 return之前子进程已经被创建好了,return会分别被父子进程执行 ,由于父子进程的数据各自私有,因此会有两个返回值.
  •         fork之后,下面的代码由父进程和子进程分别执行
  •         但是利用fork的不同返回值, 就可以控制fork下面的代码由谁来执行(分流)
  • fork之后 ,父子进程哪个先运行 ,由OS的调度器来决定.


http://www.ppmy.cn/embedded/167739.html

相关文章

DeepSeek 助力 Vue3 开发:打造丝滑的下拉选择框(Dropdown Select)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求,目前需要了解以下几个关键点及分步解决方案: --- 一、现状分析 1. Ollama 的限制: - 目前Ollama主要面向文本大模型,原生不支持直接上传/处理图片 …

2024 年 6 月青少年软编等考 C 语言四级真题解析

目录 T1. 人以群分思路分析T2. 那就别担心了思路分析T3. 凑零钱思路分析T4. 拼题 A 打卡奖励思路分析T1. 人以群分 社交网络中我们给每个人定义了一个 “活跃度”,现希望根据这个指标把人群分为两大类,即外向型( o u t g o i n g outgoing outgoing,即活跃度高的)和内向型…

现在集成大模型的IDE,哪种开发效率最高

目录 1. Visual Studio Code GitHub Copilot 2. JetBrains IDE(IntelliJ/PyCharm等) Copilot/Codeium 3. Cursor 4. 云IDE(GitHub Codespaces / Replit) 5. Amazon CodeWhisperer 效率对比与选择建议 未来趋势 1. Visual …

Linux提权之docker提权(十三) 链接第八篇完整版

书接上回 实验环境一样的 第八篇 我们用ssh密钥登陆后 发现我们web1的权限 当我们拿到web1的权限时 我们无法提权(这里我用的继续十二的环境 大家也可以继续) 所以我们首先要提权(当然必须是一个完整的 tty shell 不会的 我们去看第二篇 当然我下边也给你表注明了) python3…

进程 ─── linux第10课

目录 回顾上一节 进程 基本概念 描述进程 - PCB task_struct - PCB的一种 task_ struct内容分类 组织进程 下面来介绍task_struct内部 PID 和PPID 子进程与父进程 getpid()和getppid() 杀进程 exe 和 cwd 回顾上一节 1. 如果我们写的程序要访问硬件,必定通过sy…

远程办公2.0:从“被迫适应”到“主动进化”的未来工作革命

远程办公2.0时代:从“被迫适应”到“主动进化”的未来工作革命 ——前沿技术与趋势预测全解析 引言:一场不可逆的全球工作革命 2020年的一场疫情,让全球职场人第一次大规模体验了远程办公的“生存模式”,而五年后的今天&#xff…

【走方格——BFS,增加更新方式】

题目 代码 #include <bits/stdc.h> using namespace std;const int N 1010;int n, w[N][N]; int dist[N][N];struct pll {int x, y; };int bfs() {memset(dist, 0x3f, sizeof dist);queue<pll> q;q.push({0, 0});dist[0][0] 0;while (q.size()){pll u q.front(…