Linux基础之进程的基本概念

news2024/11/30 8:30:54

目录

一、进程的基本概念

1.1 什么是进程

1.2 PCB的概念

1.3 进程的查看

1.3.1 查看进程方式一

1.3.2 查看进程的方式二

1.4 父进程与子进程


一、进程的基本概念

1.1 什么是进程

进程是什么?

课本概念:程序的一个执行实例,正在执行的程序等。
内核观点:担当分配系统资源( CPU 时间,内存)的实体。

这个概念比较的官方,等会我可以给大家讲一讲我是怎么去理解进程这个概念的。

1.2 PCB的概念

在说PCB这个概念之前,我们首先来认识一下,一个程序是如何被我们的CPU所执行的。

       想必大家都有听说过一句话,叫做 “程序被加载到内存上了”。这是什么意思呢,为什么程序要被加载到内存上呢?根据我们的冯诺依曼结构,一个程序原本是被保存在磁盘上的,当要执行这个程序时,其就会被操作系统拷贝到内存上,程序在被拷贝过来之前,操作系统就已经在其上运行了,一个操作系统上一定会存在很多的“进程”,那操作系统要不要管理这些进程呢,肯定是要的,那怎么去管理呢,"先描述,在组织"(上节所说),那又因为操作系统是由c写的,那我们用什么去描述这个进程呢?用一个包含进程各种属性的结构体。

而这个结构体我们就叫做PCB,process control block(进程控制块)

Tips:在Linux中,PCB又可以叫做 struct_task。

这里用一张图给大家描述一下这个过程。

那么这些结构体里面会有些什么内容呢,我们可以大概猜测一下:

struct PCB
{
   //标识符
   //状态
   //优先级
   //内存指针,指向代码
   //上下文数据
   struct PCB* next;  
}

 这些内容我们之后会逐渐学习到,这里先不过多赘述。
       再有了PCB之后,那么操作系统对我们进程的管理,就变成了对我们PCB链表的管理(增删查改)。
       那这里我们就可以这样去理解我们的进程。

进程=可执行程序 + 内核数据结构(PCB)

1.3 进程的查看

       首先我们的进程有其自己的标识符,叫做 PID,我们可以通过这个可以去查看我们想要查看的进程。

这里主要介绍两种查看方式。

1.3.1 查看进程方式一

通过指令进行查看。

指令:ps ajx


那我们要是想要查看我们想看的进程该怎么做呢?
这里我们先写一个死循环的代码。

然后让其跑起来,这里要是只想看我们运行代码的进程,可以加个过滤指令:

ps ajx | grep mybin 

然后再将我们的标签头部也给加上:

ps ajx | head -1 && ps ajx | grep mybin

然后把我们的指令跑起来,重新创建一个ssh渠道去观测。

       可以很清楚的看到我们的mybin程序的PID是19387,那为什么还有一个带mybin的进程呢,那是因为我们再查询的时候,grep带了mybin,他也是一个进程所以一起展示出来了。那在当我们停止程序时,再查询,还能不能看到我们的mybin进程呢。

很明显没有了。

1.3.2 查看进程的方式二

我们通过刚刚那种方式来查看进程的PID太不方便了,那我们能不能让程序自己显示其PID呢?
答案是可以的,我们可以通过unistd库中的一个函数进行查看。

getpid() 

我们可以通过man指令看一下这个函数。

话不多说,就让我们来使用一下这个函数吧,修改一下刚刚的代码。

我们同时开一个窗口用指令来看看ID是否一致。

很明显,两边的id是一致的。

那我们开始正式的介绍第二种查看进程的方式。
       在Linux中有一个动态文件夹叫/proc,这里面会动态地存储进程的信息,我们可以用指令去查看里头的信息。

ls /proc


在 ls /proc 后加上具体的PID值就可以详细的去查看我们进程的信息了。 

1.4 父进程与子进程

       在刚刚的演示当中,我们可以看到PID的左边还有一个叫PPID的值,这个值代表parent PID
即该进程的父进程的PID。
       在unistd.h这个库中也有能查看父进程PID的函数:

查看父进程的PID:getppid()

这里修改代码,给大家演示一下。

试验如下:

通过我们几次的试验,你会发现,我们的PID一直在变化,而我们父进程的PID却没有变化,
这是为什么呢?

       这是因为在我们Linux中,父进程一般是我们的命令行解释器即我们的bash,其PID是不会变化的。

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

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

相关文章

GENRE

1、整体设计 该工作(GENRE)在新闻推荐的场景下,用 LLM 构造了三个不同的prompts,分别来进行新闻摘要的改写,用户画像的构建,还有样本增强。 2、分模块介绍 摘要改写:把新闻的title,…

Golang | Leetcode Golang题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; func largestRectangleArea(heights []int) int {n : len(heights)left, right : make([]int, n), make([]int, n)for i : 0; i < n; i {right[i] n}mono_stack : []int{}for i : 0; i < n; i {for len(mono_stack) > 0 &&am…

亚信安慧AntDB新篇章:数据库技术飞跃

随着大数据时代的到来&#xff0c;对数据库的需求愈发强烈。在这一背景下&#xff0c;国产数据库逐渐崭露头角&#xff0c;亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破&#xff0c;同时也致力于满足用户日益增长…

国内智能搜索工具实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

数据与结构--堆

堆 堆的概念 堆&#xff1a;如果有一个关键码的集合K{k0,k1,k2,…,kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足ki<k2i1且ki<k2i2&#xff08;或满足ki>k2i1且ki>k2i2&#xff09;&#xff0c;其中i0,1,2,…

综合性练习(验证码案例)

目录 一、需求 二、准备工作 三、约定前后端交互接口 1、需求分析 2、接口定义 四、Hutool工具介绍 1、引入依赖 2、测试使用Hutool生成验证码 五、实现服务器端代码 代码解读&#xff1a; 六、调整前端页面代码 七、运行测试 随着安全性的要求越来越高&#xff0c…

数据库 MySQL 四种事务隔离级别代码演示 -- 读未提交;读已提交;可重复读;串行化

前提 # 设置数据库隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;# 查询事务隔离级别 select transaction_isolation;事务处理的分离水平对应的数据整合情况&#xff1a; 隔离级别非提交读取&#xff08;脏读&#xff09;不可重复读取幻读READ UNCOMMITED√√√…

【JVM】Class文件的格式

目录 概述 Class文件的格式 概述 Class文件是JVM的输入&#xff0c;Java虚拟机规范中定义了Class文件的结构。Class文件是JVM实现平台无关、技术无关的基础。 1:Class文件是一组以8字节为单位的字节流&#xff0c;各个数据项目按顺序紧凑排列 2:对于占用空间大于8字节的数据…

Geopandas以及CMakeList程序编写技巧

Geopandas官方文档 Geopandas官方文档 reset_index()函数 pandas库中的reset_index()函数是用于重新设置数据框索引的方法。 例如&#xff1a;当我对于文件数据进行了一系列操作后&#xff0c;例如设置了索引set_index&#xff0c;那么会导致数据的索引框发生变化&#xff…

Linux网络编程】传输层中的TCP和UDP(UDP篇)

【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09; 目录 【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09;传输层再谈端口端口号范围划分认识知名端口号netstatiostatpidofxargs UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲数据UDP使…

08 - hive的集合函数、高级聚合函数、炸裂函数以及窗口函数

目录 1、集合函数 1.1、size&#xff1a;集合中元素的个数 1.2、map&#xff1a;创建map集合 1.3、map_keys&#xff1a; 返回map中的key 1.4、map_values: 返回map中的value 1.5、array 声明array集合 1.6、array_contains: 判断array中是否包含某个元素 1.7、sort_a…

最佛系的打字练习软件——TL(TypeLetters)

有朋友开玩笑说&#xff1a;TL&#xff08;TypeLetters&#xff09;是最佛系的打字练习软件。真的吗&#xff1f;仔细看&#xff0c;好像还真有这么点意思&#xff1a; 无竞速&#xff1a;TL没有速度显示&#xff0c;初学者逐个认清键位&#xff0c;无需关心速度&#xff0c;中…

不训练也能给模型加上各种超能力?

之前我写过一篇 Sakana 与 Jamba (qq.com) Sakana也好,Jamba也罢,其实都是模型合并的一种比较好的项目实践,今天我们可以讨论一下普通开发者是否能像做一个项目一样,合并多个模型,达到自己想要的效果(GPU的连载后面写,东西太多,再给2篇也不知道能不能写完 ) 不同于Sakan…

Apifox 教程:如何实现跨语言调用(Java、PHP、Python、Go 等)

在一些特定场景下&#xff0c;比如需要在 Apifox 中对文件进行读写、加密、转换格式或者进行其它业务的操作时&#xff0c;仅使用 Apifox 内置的 JS 类库可能无法满足业务需求&#xff0c;这时&#xff0c;就可以借助「外部程序」作为解决方案。 外部程序是保存在「外部程序目…

嵌入式 - GPIO编程简介

An Introduction to GPIO Programming By Jeff Tranter Wednesday, June 12, 2019 编者按&#xff1a;本 2019 年博客系列是 ICS 最受欢迎的系列之一&#xff0c;现已更新&#xff08;2022 年 12 月&#xff09;&#xff0c;以确保内容仍然准确、相关和有用。 本博客是 Integr…

【Mac】Ghost Buster Pro(苹果电脑内存清理专家) v3.2.5安装教程

软件介绍 Ghost Buster pro是一款针对Mac系统的电脑清理和优化工具&#xff0c;可以帮助用户清理系统垃圾、修复注册表错误、卸载不需要的软件、管理启动项等&#xff0c;从而提高系统性能和稳定性。 安装教程 1.打开镜像包&#xff0c;拖动「Ghost Buster Pro」到应用程序中…

当代 Qt 正确的 安装方法 及 多版本切换

此文写于 20240511 首先去网站Index of /official_releases/online_installers下载一个安装器 安装器有什么用? 可以浏览安装版本 安装组件 安装器版本越能 能装的东西越多 现在只能选Qt5 和 Qt6 至于你公司用的Qt4 我也没招 见招时再拆招 安装器 默认国外源 可以换国内…

sql函数--10---In 多个字段

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.普通 in语句查询sqlMyBatis错误写法正确写法ListString[] 2.In多个字段sql案例脚本实例&#xff1a;错误写法&#xff1a;正确写法&#xff1a; MyBatis XML 写法…

[图解]SysML和EA建模住宅安全系统-02

1 00:00:00,900 --> 00:00:02,690 这个就是一个块定义图了 2 00:00:03,790 --> 00:00:04,780 简称BDD 3 00:00:05,610 --> 00:00:08,070 实际上就是UML里面的类图 4 00:00:08,080 --> 00:00:09,950 和组件图的一个结合体 5 00:00:13,150 --> 00:00:14,690 我…

YOLOv9最新改进系列:融合空间信息关注机制(SimAM)于YOLOv9网络,在通道之间和空间位置之间建立更加准确的关联,助力YOLOv9有效涨点!!!

YOLOv9最新改进系列&#xff1a;融合空间信息关注机制&#xff08;SimAM&#xff09;于YOLOv9网络&#xff0c;在通道之间和空间位置之间建立更加准确的关联,助力YOLOv9有效涨点&#xff01;&#xff01;&#xff01; 在此之前&#xff01;先恭喜两位家人&#xff01;&#xf…