Linux详解 --- 进程管理
镜像下载、域名解析、时间同步请点击 阿里云开源镜像站
进程管理一览
接下来的几篇博客,我将主要按照这个思维导图的划分去进行讲解。

管理
在理解什么是进程管理之前,我想我们可以先理解一下什么是管理!
问题:什么是管理?
管理的过程就是:“先描述,再组织”
- 也就是用信息(数据)去构建数据结构的过程
- 管理者就是对数据结构的管理
【所有事情都可以被分类为:决策 和 执行】
管理的三个角色:
- 被管理者(学生/软硬件资源):
- 执行者(老师/驱动的角色):执行
- 管理者(校长/操作系统OS) :决策
- -> 决策的依据是什么?
信息(数据)
-> 信息量太大怎么办?
- 对信息进行分类,将同类的数据放在一起。
- 将这些信息放在一个结构体中。也就是抽象出一个结构体struct
- 即,这个结构体能够“描述”一个对象的信息 [面向对象]
结论:
- 被管理者和管理者可以不需要直接沟通。
- 管理者做管理就是对数据进行先描述,再组织。也就是对数据结构进行管理的过程。
进程概念
问题:什么是进程?我们该如何理解进程?
把程序加载到内存后,它就是进程了。 (方便理解,这里的定义是不准确的)
换句话说,就是一个程序运行起来后,它就变成了进程。
前面我们提到了,管理就是要先描述再组织,那么对进程的管理该如何描述和组织呢?
其实在将程序的代码和数据加载到内存后,OS还会为其创建对应的数据结构-----进程控制块(process control block).
描述进程 — PCB (进程控制块)
进程控制块(PCB)本质就是一个结构体,它里面存储着进程的相关信息。(所以它可以用来描述进程)
在Linux中,进程控制块的具体名称是:task_struct
task_struct中所包含的内容
- 标识符:pid,它是一个进程的唯一标识符,每个进程都不一样
- 状态:包含进程状态、退出码、退出信号等
- 优先级:相对于其他进程的优先顺序
- 上下文信息:一个进程在执行的时候,处理器的寄存器中的数据。
- 时间片:描述一个进程能执行多久
- 程序计数器:程序中即将被执行的下一条指令的地址
- I/O状态信息:包括显式I/O请求、分配给进程的I/O设备和被进程使用的文件列表等
- 记账信息:包括处理器时间总和、使用的时钟数总和、时间限制、记账号等
我接下来介绍一些task_struct中经常涉及的一些内容:
进程标识符
- 进程ID —> getpid()
- 父进程ID —> getppid()
在代码中,我们可以调用上面的两个接口去获取当前进程的pid和ppid。
包含于<sys/types.h>和<unistd.h>
pid_t getpid(void);
pit_t getppid(void);
上下文信息
在进程切换的时候,当前进程若没执行结束,则会将CPU中的执行的信息保存到上下文数据中。
保存上下文信息的目的是为了下一次使用时能恢复到之前的状态。
简述进程的切换
在程序被加载到内存中时,操作系统会为其创建对应的task_struct结构体用于描述进程的信息。
由于CPU内部只有一套寄存器,计算时需要将内存数据移动到CPU内的寄存器中,形成当前的上下文数据。
当进程被切换时:(被切换的情况:①时间片到了 ②来了更高优先级的进程,当前进程被抢占了)
因此在进程切换前,会先保存上下文信息。以便于下一次恢复上下文。
进程优先级
问题:进程优先级是什么?
CPU资源分配的先后顺序,就是指进程的优先级。
问题:为什么要有优先级?
存在优先级后,可以把进程运行到指定的CPU上,这样一来,就可以把不重要的进程安排到某个CPU上,可以极大地改善系统的整体性能。
问题:怎么设置/修改优先级?
利用PRI和NI调整优先级。
PRI与NI
在弄清楚PRI和NI之前,我们先来熟悉一条Linux中的指令!
ps -l //查看当前进程的优先级方面的信息(主要用来看优先级的) //ps -al 也可以

通过这个图,我们的聚焦点主要集中在我圈出的这几列。
- UID:执行者的身份
- PID:代表该进程的pid(标识符)
- PPID:代表该进程的ppid,也就是父进程的pid
- PRI: 代表这个进程可被执行的优先级,PRI的值越小代表越早被执行。
- NI: 代表这个进程的nice值。
优先级的数据计算与取值范围:
- PRI: ps -l所显示的PRI值是经过计算后的新PRI。 PRI (new) = PRI (old) + nice;这里的PRI是new
- NI: nice值的取值范围是 [-20, 19] 共40个级别,nice值是进程优先级的修正数据。
优先级的修改
优先级的修改都是通过对nice值进行修改,从而间接的修改PRI的值的!
这里我们要介绍一下top命令了!
top #top命令相当于Windows中的任务管理器
概括修改优先级的流程:
进入top后 —> 按 “r” —> 输入进程PID —> 再输入nice值即可修改 //没权限要sudo一下
注意:每次输入nice值后,都是对基础 PRI 值进行修改的!!!
即:每次调整都是从起始值PRI ± nice 值的
我举个,
基础值PRI = 20,那么输入nice = 10后。 PRI —》30
在此 基础上再输入 nice = -10后。 PRI —》-10
解释:第二次也是在基础值PRI = 20的基础上进行±nice的!!!
本文转自:https://blog.csdn.net/weixin_51696091/article/details/121711612
Linux详解 --- 进程管理的更多相关文章
- Linux学习之进程管理(十九)
Linux学习之进程管理 进程查看 查看系统中所有进程,使用BSD操作系统的格式 语法:ps aux 选项: a:显示所有前台进程 x:显示所有后台进程 u:显示这个进程是由哪个用户产生的 语法:ps ...
- Fragment详解之三——管理Fragment(1)
相关文章: 1.<Fragment详解之一--概述>2.<Fragment详解之二--基本使用方法>3.<Fragment详解之三--管理Fragment(1)>4 ...
- day09 详解内存管理机制
""" 今日内容:详解内存管理 1.引用计数 在内存中为了对变量的值进行标记从而方便管理,采用引用计数的方式对变量进行标记. (1)如果变量的值被引用一次,那么该变量的引 ...
- 【Linux学习】Linux系统管理1—进程管理
Linux系统管理1-进程管理 一.Linux的三种进程 Linux包括3中不同类型的进程: 交互进程:由一个shell启动的进程.交互进程可以在前后台运行 批处理进程:该进程和终端无联系,是一个进程 ...
- linux 详解useradd 命令基本用法
linux 详解useradd 命令基本用法 时间:2019-03-24 本文章向大家介绍linux 详解useradd 命令基本用法,主要包括linux 详解useradd 命令基本用法使用实例.应 ...
- 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装
Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...
- linux详解sudoers
sudo使用 Linux是多用户多任务的操作系统, 共享该系统的用户往往不只一个.出于安全性考虑, 有必要通过useradd创建一些非root用户, 只让它们拥有不完全的权限; 如有必要,再来提升权限 ...
- Linux网络配置&进程管理
原理图 查看ip和网关
- Linux系统编程@进程管理(一)
课程目标: 构建一个基于主机系统的多客户即时通信/聊天室项目 涉及的理论知识 进程控制:僵尸进程/孤儿进程.进程控制.守护进程... 进程间通信:管道.命名管道.信号... 多线程编程: 锁.信号量. ...
随机推荐
- Typora软件的使用
Typora软件 一.简介 1.该软件编写文档采用markdown格式是目前最为频繁的一种格式 2.该软件生成的文档后缀名是.md结尾 3.下载网址 https://www.typora.io/ 二. ...
- c++ 动态内存 动态数组
动态内存-动态数组 习题12.23 //连接字符串到动态数组 char *c = new char[20](); char a[] = "hello "; char b[] = & ...
- interface中setup_time和hold_time
interface中的setup_time和hold_time input:约束input信号提前T时间采样,然后在时钟沿更新到input信号上. output:约束output信号,在时钟沿T时间后 ...
- 多图|一文详解Nacos参数!
Nacos 中的参数有很多,如:命名空间.分组名.服务名.保护阈值.服务路由类型.临时实例等,那这些参数都是什么意思?又该如何设置?接下来我们一起来盘它. 1.命名空间 在 Nacos 中通过命名空间 ...
- ServiceStack.Redis的源码分析(连接与连接池)
前几天在生产环境上redis创建连接方面的故障,分析过程中对ServiceStack.Redis的连接创建和连接池机制有了进一步了解.问题分析结束后,通过此文系统的将学习到的知识点整理出来. 从连接池 ...
- docker 批量删除 none 镜像
在使用 docker images 命令的时候,经常会在列表中看到 <none>:<none> 的镜像. 这种镜像在 Docker 官方文档中被称作 dangling imag ...
- vue3-hash-calendar,一款基于vue3.x开发的移动端日期时间选择组件
在大家的催更下,鸽了一天又一天,vue3-hash-calendar 终于在今天诞生了. 按照惯例,先上效果图 Demo 扫描上方二维码或者请用浏览器的手机模式查看:https://www.hxkj. ...
- Vue 源码解读(9)—— 编译器 之 优化
前言 上一篇文章 Vue 源码解读(8)-- 编译器 之 解析 详细详解了编译器的第一部分,如何将 html 模版字符串编译成 AST.今天带来编译器的第二部分,优化 AST,也是大家常说的静态标记. ...
- 【Windows 操作系统】Windows 进程的内核对象句柄表
总结: 1.句柄就是进程句柄表中的索引.2.句柄是对进程范围内一个内核对象地址的引用,一个进程的句柄传给另一个进程是无效的.一个内核对象可用有多个句柄.Windows之所以要设立句柄,根本上源于内存管 ...
- 微服务从代码到k8s部署应有尽有系列(九、事务精讲)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...