【hello Linux】进程概念(上)

news2024/12/23 14:45:26

目录

1.操作系统(OS)

2. 进程

2.1 基本概念

2.2 task_struct 内的属性字段

2.3 查看进程

2.4 查看进程的PID及PPID

2.5 杀死进程

2.6 以文件的方式查看进程

2.7 查看退出码

2.8 上下文数据

下面介绍两个较为方便的快捷键:



 Linux🌷

冯诺依曼体系结构大家可以看下:

 冯诺依曼体系结构

在学习进程之前,首先来简单了解下操作系统:

1.操作系统(OS)

操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机工作


和资源的分配,已提供给用户和其他软件方便的接口和环境,它是计算机系统最基本的系统


软件。

总的来说,可以概括为以下三点:

1. 负责管理和协调硬件、软件等计算机资源等工作;


2. 为上层用户、应该程序提供简单易用的服务;


3. 是一种系统软件。

 

那操作系统是如何为上层用户提供服务的呢?

操作系统会为用户提供一系列的系统调用接口,通过此接口用户可以与操作系统进行一定的

交互,但与操作系统直接交互,一是存在安全隐患,二是对接口的使用太过复杂。

在此接口之上,一些大佬们又对接口进行了软件封装,以第三方库的形式呈现,也就是形我

们现在使用的一些库函数,比如C/C++/JAVA/Python库函数:printf()

那操作系统是如何管理计算机软硬件资源的呢?

先拿生活中的一个例子来说吧!

在学校中,校长可以称得上是一位管理者,学生则是被管理者,除此之外,在管理者和被管

理者之间还有一位执行者,这个角色由辅导员来担任。

校长不直接对学生进行管理,而是发号施令由辅导员来执行,完成对学生的管理。

每一位学生是一个复杂的个体,我们得先用我们已知的数据结构将学生先进行描述,再进行

管理。

例如一个struct结构体来进行描述,单链表、顺序表等组织起来方便管理。

操作系统也一样,在操作系统内部,也是先描述,再组织;

将对目标的管理,转化成为对数据的管理。

先描述,再组织:这是放在整个操作系统都适用的准则。

2. 进程

2.1 基本概念

们平常都说加载在内存中的程序就叫做进程,但这个解释是不够全面的。 

仅仅是将磁盘中的程序加载到内存中就叫做进程了吗?

其实不是

操作系统遵循先描述再组织的原则,任何一个进程在形成之前,操作系统会自动为该进程创建PCB

(进程控制块)对它进行描述,这个PCB里面包含进程的所有属性信息。

因此一个进程 = 程序文件内容 + 与进程相关的数据结构(PCB)

在Linux系统中,PCB 通常用 task_struct 来描述,它是Linux内核的一种数据结构,所有运行在系

统里的进程都以 task_struct 链表的形式存在内核里,在程序运行时会被加载到内存中

有了 task_struct 之后,我们对进程的管理都是通过 task_struct 完成的。

2.2 task_struct 内的属性字段

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

2.3 查看进程

ps axj | head -1 && ps axj | grep 进程名
//head -1 显示标题
//ps axj 显示正在运行的进程
//grep 对进程进行过滤

示例: 

编写了一个test.c程序:

 2.4 查看进程的PID及PPID

PID和PPID是进程的标识符

进程 id PID ):通过getpid()获得
父进程 id PPID):通过getppid()获得

上述例子已进行演示。

2.5 杀死进程

kill -9 PID

示例:

原本左边运行的进程被杀死了。

如果不是强制要杀死的话,我们可以使用ctrl c:退出进程 

2.6 以文件的方式查看进程

1. 进程的信息可以通过 /proc 系统文件夹查看

上面蓝色的文件对应的是一个进程的PID

进程创建时,蓝色文件(PID)自动创建,进程退出时自动消失

2. 查看具体进程属性

 我们平常在一个目录touch创建目录,直接创在当前目录下,正是因为有上述记录信息:

 2.7 查看退出码

 我们平常写程序时总是 return 数字;其实 return 的这个数字称为退出码,程序正常运行完毕后会

被它的父进程拿到

我们可以使用如下命令输出最近执行命令的退出码:

echo $?

 其实在此我们可以看到,不止运行的程序是一个进程,其实每一条命令的执行也是一个进程。

2.8 上下文数据

在CPU内部其实是存在一定的调度准则的,比如时间片轮转原则,一个进程上处理机运行几秒钟然

后下处理机换另一进程上处理机,那么便存在这一问题,如果进程还没运行完便被迫下处理机,等

下次上处理机的机会,那么它的上下文数据(运行到哪条指令了...临时数据)便要被保存起来,再此上处理

机时,便要将上下文进行恢复。

下面介绍两个较为方便的快捷键:

1. 批量化注释:

  • 在命令模式下,
  • ctrl v 
  • 选中要注释的内容(可以使用HJKL)
  • 大写I
  • 双斜杠(在此是看不到完全被注释的)
  • 按esc返回命令模式(所有选中的内容才被注释)

2. 批量化取消注释:

  • 在命令模式下,
  • ctrl v 
  • 选中要取消注释的内容(可以使用HJKL)(必须将//都选中)
  • 按d
  • 按esc返回命令模式

坚持打卡!😃

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

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

相关文章

语义分割新范式:上海 AI Lab 联合北邮、商汤提出StructToken

来源:投稿 作者:xin 编辑:学姐 Motivation 本文将当前语义分割的方法分为两类,一类是静态逐像素分类方法(static per-pixel classification),另一类为动态逐像素分类方法(dynamic p…

Ubuntu备份与恢复

Ref: create-backup-image-of-running-ubuntu Linux中我们有权访问所有系统文件,因此,最简单且直接的备份方法是将整个根目录打包: sudo su tar -cpzf /path/to/backup.tar.gz --exclude/tmp --one-file-system /其中-cpzf 表示建立压缩归档…

MQTT 持久会话与 Clean Session

1. 会话(session) 我们将从客户端向服务端发起 MQTT 连接请求开始,到连接中断直到会话过期为止的消息收发序列称之为会话。会话是服务端和客户端的一个连接,进行消息交互前必须先建立会话。 2. 会话的生命周期 MQTT v3.1.1会话…

003_螺旋矩阵

力扣54和59题 54.顺时针打印矩阵 题目: 思路:将矩阵分为若干层,首先打印最外层的元素,然后一直往里打印 对于每层,从左上方开始以顺时针的顺序遍历所有元素。假设当前层的左上角位于(top,left),右下角位于…

Axios请求(对于ajax的二次封装)——Axios取消请求、请求体编码

Axios请求(对于ajax的二次封装)——Axios取消请求、请求体编码知识回调(不懂就看这儿!)场景复现核心干货axios取消请求AbortControllerCancelToken deprecated请求体编码浏览器qs库编码数据ES6库方法node.jsQuery stri…

【神经网络】tensorflow实验3--NumPy科学计算库

目录 1. 实验目的 2. 实验内容 3. 实验过程 题目一: ① 代码 ② 实验结果 题目二: ① 代码 ② 实验结果 题目三: ​编辑 ① 代码 ② 实验结果 5. 实验小结 ① 实验过程中遇到了哪些问题,你是如何解决的? …

Android引入Apollo(阿波罗)

程序猿日常 记Android项目引入Apollo(阿波罗)上源码 apollo开发分支 应用 Apollo(阿波罗)客户端会管理好应用的后台GraphQL数据 之前网络请求使用RetrofitOkHttp 改成使用ApolloOkHttp 引入 1.对应的module的build.gradle中添加 id("com.apollographql.apollo3&qu…

【计算机系统概论Yale.patt】第一章

文章目录1. 计算机是简单部件的系统组合1.1 计算机组成1.1.1 编码体系1.1.2 晶体管构建微处理器1.1.3 冯诺依曼机1.1.4 LC-3机(冯诺依曼机实现)1.1.5 LC-3编程机器语言编程汇编语言编程输入输出信息问题两个重要机制栈和数据转换示例:计算器1.2 两个重要理念1.2.1 抽…

Linux基础篇(三)常见指令

目录 一、创建文件和目录 二、命令详解 0. 命令和选项 1. ls命令 2. cd命令 3. touch命令 4. mkdir命令 5. tree命令 6. rmdir命令 7. rm命令 8. man 9. nano 10. cat命令 11. cp 命令 12. mv 命令 13. echo命令 14. more命令 15. less命令 16. Ctrl C 17. head 命令 18. tail…

台灯的种类有哪些?国内热门护眼灯品牌推荐

台灯是我们日常生活中常见的电器之一,台灯不仅可以为人们照明,还可以用来家居装饰,根据人们不用的需求,台灯的种类也很多,有书房台灯、读写台灯、工艺台灯。 书房台灯:灯光的局部照明效果,以书写…

禅道OpenAI更新至1.2版本,超多实用功能惊喜上线!

广受欢迎的禅道OpenAI插件近日成功发布,截至目前已更新至1.2版本。 截至本版本发布,禅道OpenAI已经拥有了神奇海螺(ChatGPT聊天)、需求润色、任务润色、Bug润色及本次的需求一键生成用例功能,仍有更多实用的新功能正在…

Sentinel 工作主流程

Overview 在 Sentinel 里面,所有的资源都对应一个资源名称以及一个 Entry。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用 API 显式创建;每一个 Entry 创建的时候,同时也会创建一系列功能插槽(…

2023年第1季社区Task挑战赛开启,等你来战!

社区Task挑战赛是面向社区开发者开展的代码或教程征集活动。该挑战赛为社区中热爱FISCO BCOS及周边组件的开发者提供了探索区块链技术、挑战技术难题的舞台。该挑战赛去年在社区成功举办了3季,共吸引了数百名开发者报名。 前3季都有哪些有趣的作品? 在…

【图数据挖掘】— 子图同构问题、单射函数和双射函数、同构(isomorphic)和同态(homomorphism)

子图同构问题 子图同构(Subgraph Isomorphism)是指在图论中,两个图之间是否存在一种关系,使得其中一个图的顶点集合和边集合可以通过对应的方式映射到另一个图的顶点集合和边集合上,且保持原来的边和顶点的关系不变。…

如何设计一个安全的对外接口?

对外接口安全措施的作用主要体现在两个方面,一方面是如何保证数据在传输过程中的安全性,另一方面是数据已经到达服务器端,服务器端如何识别数据。 1. 数据加密 数据在传输过程中是很容易被抓包的,如果直接传输,数据可…

elasticsearch 核心概念

1.近实时(Near Real Time,NRT) elasticsearch 是一个近实时的搜索和分析平台,这意味着从索引文档到可搜索文档都会有一段微小的延迟(通常是1s以内)。这种延迟主要是因为 elasticsearch 需要进行数据刷新和索引更新。 …

远程代码执行渗透与防御

远程代码执行渗透与防御1.简介2.PHP RCE常见函数3.靶场练习4.防御姿势1.简介 远程代码执行漏洞又叫命令注入漏洞 命令注入是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。 当应用程序将不安全的用户提供的数据(表单、cookie…

jQuery 基础入门速成上篇

jQuery 是目前使用最广泛的 javascript 函数库。提到 jQuery 你可能知道这句英文 : ———— Write Less,Do More ( 写的少,做的多 ) 引入jQuery jQuery是一个函数库,一个 js 文件,页面可以使用 script标签 引入使用&a…

JVM 类加载器

文章目录1 类加载器1.1 类加载器介绍1.2 类加载器的加载规则1.2 类加载器类型总结2 双亲委派模型2.1 双亲委派模型介绍2.2 双亲委派模型的执行流程2.3 双亲委派模型的好处回顾一下类加载过程:加载->连接->初始化。 其中连接又分为:验证->准备-&…

指针太难?手把手教你理解指针(传参、函数指针)

目录 前言 一、数组和指针的参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 二、函数指针 1.函数的地址 2.函数指针的形式 3.函数指针的使用 三、加深理解,两段有趣的代码 前言 之前的一篇文章讲到了指针的概念、指针和数组的关系&am…