Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux课程学习】:进程描述---PCB(Process Control Block)

【Linux课程学习】:进程描述---PCB(Process Control Block)

作者头像
用户11396661
发布于 2024-12-09 07:24:56
发布于 2024-12-09 07:24:56
22400
代码可运行
举报
文章被收录于专栏:C++开发C++开发
运行总次数:0
代码可运行

1.操作系统OS也是一个软件,在开机的时候被加载到内存进行运行,到这里才能让操作系统帮我们去运行其他的程序。

2.为什么要有PCB?(先描述,再组织)

因为操作系统要管理进程,管理系统之前就必须对进程进行描述。

3.命令也是一个进程,过滤查看的时候能查到。

4.让程序运行起来,本质就是启动了一个进程。命令也是系统中的一个命令,所以我们执行命令的时候,也是启动了一个进程。

5.ps查看进程的信息其本质也是去/proc目录下查找。

6./proc不是磁盘级的文件,是内存级的。

7.命令行执行,都是bash进程创建子进程,然后通过子进程程序替换达到要运行程序的目的。

这样当执行的程序发生错误,也不影响bash进程。

8.(void)取消编译器对不用变量的警告。

9.Linux进程时树形结构。

1.基本概念:

🥝进程的概念

进程的概念

课本概念

程序的一种执行实例,正在执行的程序。

内核观念

担当分配系统资源的实体(CPU,内存)。

🥝进程描述的引入

我们写的程序(code.c)首先要编译成二进制程序(code.exe)。这两个程序都是文件,保存在磁盘中。

要想让code.exe文件运行,首先code.exe要加载到内存中,加载的本质是拷贝,也就是把code.c拷贝到内存中。(input)

在计算机中,会有很多的进程,要管理进程,就要对进程进行描述。把对应的文件加载到内存中,不单单要加载它的代码和属性,还有为它创建一个struct进行描述。进程的描述有进程的一系列属性。

🥝PCB的概念:

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

Linux操作系统中的PCB是task_struct。

每一个进程都会有一个PCB进行管理。 进程=PCB(task_struct)+代码和数据。

所以一个进程被加载到内存,最本质的操作系统为其在进程管理列表中创建了一个PCB(task_struct)。

进程在等待被运行,其也是task_struct在进行等待。task_struct中有属性信息,可以根据这些信息进行先后排队。

PCB(Process Control Block)

🍒Linux最早版本的task_struct有那些属性:

🍒查看进程的信息:

方法一:

ps ajx | grep (进程名):查看此时进程信息。 ps ajx |head -1:打印属性名称, ;或者&&:可以执行多条命令。 ps ajx | head -1 && ps ajx | grep code | grep -v grep :只查看./code的信息。 ps的底层就是去/proc中查找。

为什么我们查code程序的时候,会有code?

上面我们执行的命令也是一个进程,执行到code命令的时候,也是一个进程,它的关键字也有code,所以也过滤出来了。

方法二:

在更目录下的proc目录中查看进程的信息:

ls /proc:查看所有进程的信息。

每一个目录代表一个进程,目录里面就是该进程的信息。

每次我们新建一个进程,就会在这个文件夹中新建一个以该进程pid为名称的文件夹,这个文件夹存放我们新建进程的信息。

当我们删掉这个进程时,刚刚新建的文件被删除了,所以这个文件的信息是动态更新的。(所以它是内存级的)

🍒进程里的两个重要信息:

cwd(current work dir):可以更改

表示当前的工作路径,如果我们不表示路径,直接新建一个文件,会用cwd的路径进行文本拼接,就让新建的文件在当前的目录。

当进程启动的时候,就会记录当前所在的路径。

改变cwd

chdir:可以改变进程的cwd路径 通过这样的方法,可以验证程序是根据cwd路径进行创建文件的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #include <stdio.h>                                                                                                                                                                                             
 #include <unistd.h>
 #include <stdlib.h>
 
 int main()
 {
     chdir("/home/kym/linux-code");
     FILE* fp=fopen("log.text","w");
 
     while(1)
     {
         printf("我的pid是:%d\n",getpid());
         sleep(1);
     }
     fclose(fp);
     return 0;
 }
exe:

表示该可执行程序在磁盘的哪个位置。当程序启动的时候,如果我们根据这个路径去删除可执行文件。此时刚刚执行的文件不会停止。因为当程序运行,它会拷贝到内存中,而我们删除的是磁盘中的文件。

此时的exe显示文件被delete


进程的分类

⚽️常驻进程:

用户不主动关闭,就一直存在。比如我们启动的应用。

⚽️非常驻程序:

执行完就会退出的程序。比较一系列的指令:ls,pwd指令。


PCB中标识符---pid(Process Identifier):

🏀pid的引入:

我们使用的系统中,会有很多的进程,但是靠进程的名字字符串去区分不同的进程有点不方便,而且可能还会有相同名字的进程,这样就更不好区分了。所以给每个进程都引入了一个唯一的标识符pid。

标识符(pid):描述本进程的唯一标识符,用于区分别的进程。

🏀如何在程序中获得pid:

通过函数getpid获得,返回值就是该进程的pid值。一个程序只要不是重新被加载到内存进行运行,它的pid是不变的,所以只要getpid一次,保存好pid就可以了。

pid_t定义的一种类型,其本质就是整数。

头文件: #include <sys/types.h> #include <unistd.h> 函数原型: pid_t getpid(void); pid_t getppid(void);

🏀如何通过进程pid杀死一个进程:

kill -9 (进程pid):-9表示SIGKILL

通过信号进行杀死进程。


PCB---ppid:

ppid代表父进程的pid值。

新建的进程都是由父进程创建的,每一个进程都会有父进程,bash进程除外。

当我们每次运行同样一个程序,发现每次的ppid都是一样的。然后我们通过ps查的这个pid是bash进程的pid。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux——进程
当我们编写完代码运行并让代码编译起来时,在当前路径下会出现由代码编译而成的可执行文件.exe。当我们运行这个可执行文件时,该程序便会被加载到计算机的内存当中,一些教材可能会把这个已经运行起来的程序叫做进程,其实这是不完整的,真实的进程还需要包括管理这个程序的PCB。
Yui_
2024/10/16
7580
Linux——进程
深度理解linux系统—— 进程概念
我们现在来想一下,程序要想运行,就要加载到内存,那在内存到底有多少等待执行程序呢?
星辰与你
2025/04/28
1910
深度理解linux系统—— 进程概念
【Linux】进程(1)进程概念和进程状态
在学习 Linux 操作系统的过程中,进程是一个至关重要的概念。无论你是想了解系统的基础操作,还是深入研究 Linux 内核,进程管理的理解都将为你打下坚实的基础。进程不仅是操作系统资源管理的核心,也是实现多任务处理的关键所在。通过学习进程的创建、调度、同步等机制,你可以更好地掌握操作系统的运行原理,进而优化系统性能和解决实际问题。本文将从基础知识入手,带领大家逐步深入探索 Linux 中进程的各个方面,帮助你在 Linux 学习的道路上迈出坚实的第一步。
ephemerals__
2025/03/16
3810
【Linux】进程(1)进程概念和进程状态
【Linux】进程理解与学习(Ⅰ)
进程是什么?我们打开任务管理器可以看到有很多的程序正在运行状态,并且上面写着进程二字。难道进程就是指这些被运行起来的程序吗?课本上对于进程是这么说的:程序的一个执行实例,正在执行的程序等。
诺诺的包包
2023/03/08
5430
【Linux】进程理解与学习(Ⅰ)
【Linux】从零开始认识进程 — 前篇
学习进程,我们需要对计算机操作系统 有一个初步的了解,也就是经典的冯诺依曼体系: 计算机的逻辑结构。冯·诺依曼从逻辑入手,他的逻辑设计具有以下特点: (1)将电路、逻辑两种设计进行分离,给计算机建立创造最佳条件; (2)将个人神经系统、计算机结合在一起,提出全新理念,即生物计算机。 符合人们的一般认知:
叫我龙翔
2024/03/18
1780
【Linux】从零开始认识进程 — 前篇
Linux进程概念
进程(Process)是计算机中的一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
利刃大大
2023/04/12
5690
Linux进程概念
【linux】进程理解
在计算机科学中,进程是操作系统中的一个基本概念,代表了计算机程序的一次执行实例。进程不仅包括正在执行的程序代码,还包括程序的当前活动,包括程序计数器的当前位置、处理器的寄存器和变量的值。简而言之,进程是一个具有自己独立功能的程序在某个数据集上的运行过程,它可以分配和管理资源。
用户11029103
2024/10/12
2290
【linux】进程理解
[操作系统] 进程的概念与基础操作详解
从用户的视角来看,进程是一个程序的运行实例;从操作系统的视角来看,进程是一个拥有资源分配能力的实体。
DevKevin
2025/01/18
3080
[操作系统] 进程的概念与基础操作详解
Linux之进程概念
写过代码的都知道,当你的代码进行编译链接之后就会形成一个可执行的程序了,这个程序本质上是一个文件,是放在磁盘上的。当我们双击这个程序让他运行起来之后,本质上是让这个程序加载到内存当中去了,因为只有加载到内存当中去CPU才能对他进行逐语句执行,而一旦将这个程序加载到内存之后,我们就不应该叫他程序了,严格意义上应该称他为进程。
用户11036582
2024/10/01
1570
Linux之进程概念
【Linux】进程初步理解
电脑里面的硬件不是随便就能构成计算机,这些硬件是按照一定的规则去组装电脑的。 计算机的核心工作就是通过一定的输入设备,把数据交给计算机cpu,而cpu经过一定的设备再显示出结果。 计算机的构成遵循冯诺依曼体系结构:
zxctscl
2024/04/10
1060
【Linux】进程初步理解
全面剖析 Linux 进程管理与 PCB 机制
进程是操作系统的核心概念之一,也是计算机执行任务的基本单位。在现代操作系统中,如何高效地管理和调度众多进程,是系统设计和性能优化的重要课题。Linux作为一个多用户、多任务操作系统,其进程管理实现不仅科学严谨,还高度模块化。本篇文章将深入剖析Linux中的进程管理机制,重点讲解进程控制块(PCB)的结构和作用,帮助读者理解操作系统的运行原理。
suye
2025/03/12
1860
全面剖析 Linux 进程管理与 PCB 机制
【Linux】进程概念
可这样就看不到开头第一行的说明了。所以还可以使用&&进行连接,表示同时执行该指令。
秦jh
2024/08/30
1640
【Linux】进程概念
【Linux修炼】8.进程概念
那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!
每天都要进步呀
2023/03/28
5980
【Linux修炼】8.进程概念
Linux进程学习【进程状态】
进程 只有被OS管理好了,才能发挥它的全部功效,而系统中存在多个 进程,OS无法做到面面俱到,因此为了更好的管理进程,OS把 进程 分成了几种状态:阻塞、挂起、运行、休眠等等,至于每种状态的应用场景是什么、有什么用?本文将会带着大家认识的各种 进程 状态
北 海
2023/07/01
8470
Linux进程学习【进程状态】
【Linux】冯诺依曼体系结构、操作系统概念、进程概念
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
摘星
2023/10/15
3140
【Linux】冯诺依曼体系结构、操作系统概念、进程概念
【Linux】对进程PCB的理解&&查看进程信息的方法
首先我们要清楚的是,操作系统是一个进行软硬件资源管理的软件。操作系统对下要管理好底层硬件。每一个硬件的生产产商都会给他们的产品提供对应的驱动程序,驱动程序是特定于某一硬件或系统设备的软件组件,它为系统提供管理硬件的各种功能。当软件需要实现某些功能,而这些功能无法通过应用程序单独实现或难以实现时,驱动程序就能派上用场。操作系统通过驱动程序对底层的硬件进行管理。
用户10923276
2024/03/28
3290
【Linux】对进程PCB的理解&&查看进程信息的方法
相关推荐
Linux——进程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验