理解linux进程(1)

基本概念

课本概念:程序的一个执行实例,正在执行的程序等

内核观点:担当分配系统资源(CPU时间,内存)的实体

4e8c2b72db4b403dbbaeaefdf7af7104.png

windows上的进程

由上图可以看出在OS中进程可以同时存在并且非常多

ed3792367f6c40ef942dbe718c0d4cc2.png

大概理解进程

在Linux中,内核不会有自己的 PCB(进程控制块),因为 PCB 是用于描述和管理用户空间中的进程的数据结构。内核本身不是一个进程,而是运行在特权模式下的操作系统核心,它负责管理系统资源、调度进程、处理中断等核心任务,而不是被描述和管理如同普通进程一样。
相反,内核会维护系统中所有进程的 PCB。当一个新的进程被创建时,内核会负责为其分配一个新的 PCB,并将其加入到进程表中。这个 PCB 包含了进程的各种信息,包括 PID、进程状态、程序计数器等。
总的来说,内核不会有自己的 PCB,但是它会管理并操作用户空间中的进程的 PCB。

 fd2118b8acb64a53a2f5b1207dfb6018.png

进程=内核task_struct结构体+程序的代码和数据

 理解一个概念:如何理解进程动态运行?

只要我们的进程task_struct在不同的队列中就可以访问不同的资源

 PCB

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

PCB也叫进程控制块,这个数据结构是在操作系统内部进行管理进程的,一般叫他内核数据结构

我们都知道开机是在加载OS,刚开始OS也是在磁盘中是一堆二进制文件,等待的时间是将磁盘中的文件拷贝到内存中,以便计算机可以开始执行操作系统的代码并进行初始化

在操作系统启动的时候,通常会创建一个特殊的进程,这个进程通常被称为 init 进程。init 进程是在操作系统引导过程中由内核启动的,它是用户空间中的第一个进程,负责系统的初始化和进程管理。它会一直存在于系统运行期间。

操作系统在启动时会创建 init 进程的进程控制块(PCB),用于描述和管理这个特殊进程的信息。进程控制块(PCB)是操作系统用来管理进程的数据结构,它包含了进程的状态、程序计数器、堆栈指针、内存分配情况、打开文件的状态等信息。

加强认识:OS对于进程管理是通过PCB进行管理的而不是将你的可执行程序加载到内存中对你的可执行程序管理

 为什么要有PCB?因为OS要对进程管理

 task_ struct内容分类

task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

进程的task_struct本身内部的属性有哪些?

1. 启动   

./xxx 本质就是让系统创建进程并运行----我们自己写的代码形成的可执行==系统命令==可执行文件。在linux中运行的大部分操作其实本质就是运行进程。

在windows中双击就是运行进程,在linux中./就是运行进程

e83960bf5fee4300874937b9bd735ee0.png
2. 每一个进程都要有自己的唯一标识符,叫做进程pid

3. ctrl+c在用户层面上就是终止进程,kill -9 pid 可以直接杀死进程

ef07e06bb30b4dc49e60aad575a9f804.png

多次运行发现pid是变得而ppid不变
进程每次启动,对应的pid都不一样是正常的

 f540371d3b3444f09ff11c57e6fe9f1f.pngdcfdfe3e32394f4ab09e789739b21a67.png

 为什么要创建子进程?

我们想让子进程执行和父进程不一样的代码(由于机器的限制部分功能无法展示)

4a7d167a849b45c7ba98a025d9d87335.png
fork之后父子代码都是共享的,只不过进行判断了所以父与子运行不同

47964d2a18104afd8b133d7dfacf0037.png
当调用 fork() 时,操作系统会复制当前的进程,包括它的地址空间、文件描述符等,然后在新的进程中继续执行代码。在调用 fork() 后,会出现两个几乎完全相同的进程:父进程和子进程。这两个进程的唯一区别在于 fork() 的返回值不同:

  • 在父进程中,fork() 返回子进程的进程 ID。
  • 在子进程中,fork() 返回 0。

 fork()会有两个返回值,返回两次

fork()也是函数只不过是由os提供的,可以这样理解:在fork内部我们已经把子进程创建可以被调度了所以return两次

 进程一定要具有独立性即使我俩是父子也不影响,所以父子进程有自己独立的task_struct(也有自己独立的pid),而代码是只读的,数据原则是要分开的

ls /proc当你执行 ls /proc 命令时,会列出一系列以数字命名的目录,每个目录代表一个正在运行的进程或者系统相关的信息

405b3fd40ba64eaaae7a31ac07f702ae.png
ls /proc/x -d查看具体

ls -l /proc/x 查看正在运行的进程可以看出有exe和cwd

exe 是一个指向正在执行的进程可执行文件的符号链接。通过查看这个符号链接,你可以知道该进程当前正在执行的可执行文件的路径

cwd 是一个指向进程当前工作目录的符号链接。通过这个符号链接,你可以了解到该进程当前的工作目录路径。

 由于机器有限部分内容无法展示

 

 

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangsir.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值