【Linux】——操作系统-进程详解

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦

本文由:残念ing原创CSDN首发,如需要转载请通知

个人主页:残念ing-CSDN博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

📣系列专栏:残念ing 的【Linux】系列专栏------CSDN博客

目标
1. 描述进程-PCB
2. 理解CWD
3. ppid
4. 使用系统调用,创建进程
5. 创建多进程--demo
6. 理解创建子进程---结合系统接口上

目录

  • [1. 描述进程-PCB](#1. 描述进程-PCB)
    • [1.1 task_struct-PCB的一种](#1.1 task_struct-PCB的一种)
    • [1.2 task_struct的内容分类](#1.2 task_struct的内容分类)
  • [2. 理解CWD](#2. 理解CWD)
  • [3. ppid](#3. ppid)
  • [4. 使用系统调用,创建进程](#4. 使用系统调用,创建进程)
  • [5. 创建多进程--demo](#5. 创建多进程--demo)
  • [6. 理解创建子进程---结合系统接口上](#6. 理解创建子进程---结合系统接口上)
    • [6.1 一个函数fork,怎么会有两个返回值](#6.1 一个函数fork,怎么会有两个返回值)

1. 描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。

课本上称之为PCB(process control block)Linux 操作系统下的PCB是: task_struct

1.1 task_struct-PCB的一种

task_structLinux内核的一种数据结构,它会被操作系统在内存当中进行创建**,里面包含着进程的管理信息**

1.2 task_struct的内容分类

标识符:描述本进程的唯一标示符,用来区别其他进程
状态: 任务状态,退出代码,退出信号等
优先级: 相对于其他进程的优先级
程序计数器: 程序中即将被执行的下一条指令的地址
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据休学例子,要加图CPU,寄存器
I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等
其他信息

知识补充:
把程序运行起来,双击、./xxx.exe ,其本质就是在系统中启动了一个进程:
执行完就退出------ls pwd等命令
一直不退,直到用户退出------常驻进程

2. 理解CWD


总结:当前路径=进程的CWD
/proc不是磁盘级别的文件

3. ppid

ppid:父进程ID

在LInux·系统中,启动之后,新创建任何进程的时候,都是由自己的父进程创建的!

命令行中,执行命令/执行程序,本质是bash(命令行解释器--shell)的进程,创建的子进程,由子进程执行我们的代码

4. 使用系统调用,创建进程

4.1 看一看子进程的创建

结论:Linux进程中整体是树形结构------图形

4.2快速解释函数的特点(返回值上,不做理解的介绍)

父:子=1:n

fork()->两进程->父子关系->一般而言,代码是会共享的,但是数据是各自私有一份的

那问题来了,为什么数据是各自私有一份的呢???
因为进程具有很强的独立性!多个进程之间,运行时。互不影响,即便是父子

5. 创建多进程--demo



运行的结果:

6. 理解创建子进程---结合系统接口上

6.1 一个函数fork,怎么会有两个返回值


因为父子进程的数据是各自私有一份的,会调用到两次fork函数,看似是同时放回了两个返回值,实践上是分别返回的。

补充: 一个变量会有两个放回值的原因是因为进行的时候需要独立。

fork之后谁先运行取决于OS的调度器自主决定

相关推荐
逝水无殇23 分钟前
C# 枚举(Enum)详解
开发语言·后端·c#
AOwhisky33 分钟前
Linux(CentOS)系统管理入门笔记(第四期)——文件系统(下篇):文件与目录操作实战——cpmvmkdirrmln
linux·运维·笔记·centos·云计算·文件系统
nianniannnn35 分钟前
c++复习自存--标准模板库STL
开发语言·c++·windows
努力努力再努力wz44 分钟前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
什巳1 小时前
JAVA练习275-乘积最大子数组
java·开发语言·数据结构·算法
岑梓铭1 小时前
考研408《操作系统》复习笔记,第四章《4.2.2 文件操作、文件共享、文件保护》
linux·考研·操作系统·文件系统·408
lang201509281 小时前
Apache POI Word(docx) 实战教程:从入门到精通表格合并、图片插入与文档合并
java·开发语言·word
最爱老式锅包肉1 小时前
《HarmonyOS技术精讲-ArkGraphics 2D(方舟2D图形服务)》第七篇:动效来袭——与ArkUI结合实现2D动画与交互
华为·交互·harmonyos
Mr.HeBoYan1 小时前
DPDK为什么越来越少使用rte_ring?——从Lock-Free到Run-to-Completion,重新理解现代DPDK架构演进(上)
linux·网络·算法·性能优化·架构·dpdk
鱼毓屿御2 小时前
Python 装饰器与函数调用机制(复习笔记 · 2026-07-07)
开发语言·python