Linux系统编程04

进程的概念

进程(动态)是一个正在运行的程序(静态)
多道程序设计缺点:
(1)缺乏隔离,各个程序之间可以直接访问,使用对方的数据
(2)内存使用率低,如果一个新任务过来存放不下,我们需要将某个程序整个换出内存在进行存放
(3)地址使用麻烦,耨个程序可能会被多次加载,每次加载所处的物理地址都不一致,只能使用相对地址,对硬件要求很高
解决上面的问题,我们提出了虚拟:
我们在用户和内存中间加了一个虚拟内存,将复杂的底层内存抽象成建简单的结构
在这里插入图片描述
虚拟如何实现对内存的抽象:
(1)每个进程在逻辑上有自己独立的内存空间(进程地址空间),看不到其他进程,让用户感觉自己在独占整个电脑
(2)使用虚拟内存

虚拟内存的实现

内存里面我们使用到的热点内存是很难少的,大概率不会全部内存都使用到
局部性原理:我们在调用内存区域的某条指令,我们很有可能访问这条指令周围的其他指令
操作系统一般会对内存进行分页和分块进行存储使用,分页是目前大部分在使用的
分页:将内存分割成大小相同(4096B)的单元
我们在将虚拟内存的热点页驻留到内存里面,如果现在我们有很多页需要驻留,那么我们会将长期不用的页换出到磁盘的交换分区(虚拟内存),以防止下次用户需要对指令进行调用
对于用户只需要关注虚拟内存,并不需要关注物理地址,在代码中只需要用虚拟内存
在这里插入图片描述
分时系统缺陷
用户需要主动放弃CPU,这样就导致程序员不仅要关注自己代码的实现,还要区关注进程对CPU的使用情况
为了解决这个问题,我们在用户和CPU之间添加一个虚拟CPU,让用户觉得自己在独占CPU,这样程序员便不用关注其他用户进程对CPU的使用
并行在某个时刻,多个进程同时运行 -------只有一个CPU核心,不能并行
并发在某段时间,多个进程同时运行
进程的切换
进程可通过修改寄存器的pc指针实现切换,寄存器的状态称为上下文
Linux一般使用完全公平调度算法
行为和时间片轮转几乎一样,但可以动态的根据运行情况调整优先级
Linux将进程信息存储在task_struct任务描述符里,然后将其放进任务队列,这个队列是一个双向链表
pid时一个正整数,给用户唯一标识不同的进程
在这里插入图片描述
其中PPID是表示当前进程的父进程,在Linux中,进程之间存在亲缘关系ps的父进程是bash

获取PID
在这里插入图片描述
这个操作永远都不会出错,因此执行此操作不用进行错误检查
在这里插入图片描述
进程的权限
之前我们学过文件有9种权限分别为u,g,o三种用户组赋予r,w,x权限
一个文件的权限实现是要确定执行这个文件的进程所拥有的权限
在这里插入图片描述
在这里插入图片描述
默认情况下用户的uid有效用户身份和euid真实身份都是一样的,都是启动这个进程的用户,我们怎么判断这个用户是否能够启动这个进程,首先user要有可执行程序的X权限,通过该程序启动一个进程,进程的uid和euid都是user
同样的可执行文件对不同的用户其所可以执行的操作权限是不同的
其实文件的权限有12位权限处理不同用户组u,g,o下的r,w,x还有suid,sgiid,sticky权限
suid
suid权限生效的条件
(1)用户ux执行权限和 其他人o的执行x必须存在
(2)用户us(suid)存在
其他用户o通过可执行程序启动的进程euid更改程序的拥有者,这是就会更改程序的uid,此时对应的uid其他用户o可以拥有此执行程序的权限
在这里插入图片描述
我们可以看到开始我们没有改变可执行文件的suid权限时,我们在用其他用户执行文件时,会报错无法打开文件,这是其他用户就是第三者,没有权限执行这个程序,当我们切换为程序所有者更改suid属性,当我们切换回其他用户时,就可以正常运行,并且回将其真实归属用户和当前执行用户的id打印出来

sgid
sgid权限生效的条件
(1)同时拥有其他用户o的执行权限x和组内用户g的执行权限x
(2)拥有组内用户的s(sgid)
在这里插入图片描述
在这里插入图片描述
stick粘滞位
针对目录文件的
stick起作用的条件
对于其他用户o,拥有wt权限,给文件加上stick之后,其他用户可以创建文件,可以删除自己的我呢见,不能删除别人的文件
在这里插入图片描述

进程相关命令

在这里插入图片描述

ps的两种用法
(1)ps -elf可以展示所有的进程信息
在这里插入图片描述
F--flag属性一般不起任何作用,数值越低优先级越高
S--进程的status状态 D不可中断的睡眠(不会响应信号),一般是读写磁盘的时候;I空闲状态;R运行态或就绪态(因此PS指令不能区分就绪态或运行态的,因为PS也是一个进程,所以不能获取到别的进程的状态);S可中断睡眠,可以响应信号,类似于scanf,read一个管道等;T被暂停(CTRL+Z);tgdb中调试暂停;Z僵尸进程(进程已终止,资源未回收,主要是task_struct未回收)
在这里插入图片描述
PEI NI表示优先级
ADDR驻留内存的起始地址
SZ驻留内存的大小
WCHAN(重要)阻塞的系统调用
(2) ps aux
在这里插入图片描述
可以显示内存使用率

VSZ虚拟内存的大小

RSS驻留集(虚拟内存分配在物理内存中有多大)大小

START状态
以下,辅助状态
在这里插入图片描述
专门看内存的命令free
在这里插入图片描述
Mem:物理内存
Swap:交换分区
shared共享内存
buffcache的区别
(1)buff是内核缓冲区,cashe是页缓存
(2)buff本质是一个队列,采用先进先出的结构,防止读取数据或者写入数据某一操作过快,而不均衡,cashe为了提高速度,将我们经常访问的数据复制一份放在高速缓存里面,让使用数据能够迅速找到

ps -elf只能获取某一时刻的进程状态
top获取实时的进程状态
在这里插入图片描述
在这里插入图片描述

优先级系统

Linux中有140个优先级级别Ubuntu中的优先级标号是-40 ~ 99数值越低,优先级越高
这些优先级又被分为两个部分
-40 ~ 59 实时优先级,高优先级的策略先运行,如果处于这个区间优先级的程序就会使用FIFO(先来先处理)以及RR(时间片流转)两种调度算法
60 ~ 99 普通优先级,使用完全公平调度算法
用户无法修改调度策略,而且用户只能修改进程优先级在60 ~ 99之间进行修改

NiCE值 间接修改优先级,可以使用nice值启动进程

NICE-20019
PRI608099

在这里插入图片描述

在这里插入图片描述
增加NICE值
在这里插入图片描述
我们可以将进程的优先级调高,但是不随意将进程的优先级调低,如果要将进程优先级调低,就需要使用sudo,但是优先级也只能在普通优先级数值内进行调整
在这里插入图片描述
在这里插入图片描述
renice -n -10 -p while1 sudo renice -n -10 -p while1两个指令也可以调整优先级,但也只能在普通优先级里面进行调整

前台和后台

前台:可以响应键盘中断的进程就叫前台进程(CRTL + C 中止,CTRL + \终止,CTRL + Z 暂停)
后台:不可以响应键盘中断的进程就叫后台进程

默认启动的进程是前台运行态进程
./while1 &以这样的命令启动时默认启动运行态的后台进程
jobs可以罗列出本窗口中所有的前台和后台进程,不同的窗口运行jobs打印的数据都是不一样的,只针对bash
在这里插入图片描述
使用fg将后台进程拉到前台
fg 1是将上面jobs里面显示的序号进程号
在这里插入图片描述
使用CTRL + Z将前台进程转为后台stopped状态进程
使用bg命令将后台暂停(stopped)进程转为运行状态
使用kill命令杀死后台进程(1.获取pid;2,kill -9 pid)任何程序执行这个指令都会被杀死
在这里插入图片描述

crontab定时任务

单个用户的定时任务 crontab -e
在这里插入图片描述
上面表示在4月11号17点的每一分钟向/home/mask/111.txt文件中写如123字符串
多用户的定时任务
sudo vim /etc/crontab
在这里插入图片描述

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

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

相关文章

香港服务器在国内访问太慢怎么能提高?

​  一直以来,全球化业务需求的增长是跟随着蓬勃向上的互联网而发展的。有了网络,海外贸易就在鼠标的轻点中完成。而IDC市场中的香港服务器也因为免备案政策的特性,开始逐渐成为企业想要跨越地域壁垒而考虑的对象。但在使用过程中&#xff…

新手如何找到Docker容器(redis)中的持久化文件?

具体步骤 要查看Docker容器的dump.rdb和appendonly.aof文件(如果启用了AOF持久化)的位置,我们需要知道容器中Redis配置文件的内容或者容器的数据卷的挂载位置。 这里是一般步骤: 查找容器的数据卷挂载位置 使用docker inspect命令…

内存爆炸、CPU100%问题定位

目录 一、内存爆炸相关1、关于-Xms(最小堆内存)和-Xmx(最大堆内存)2、JVM初始化时申请实际物理内存3、OutOfMemory问题排查(1) 堆内存溢出排查(2) 堆外内存溢出排查 二、CPU 100及死锁问题定位1、CPU 100问题排查(1) 找到程序对应进程号(2) 查找进程对应的线程编号(3)查看线程堆…

零基础入门网络渗透到底要怎么学?_网络渗透技术自学

前言: 很多朋友问我,想搞网络安全,编程重要吗,选什么语言呢? 国内其实正经开设网络安全专业的学校很少,大部分同学是来自计算机科学、网络工程、软件工程专业的,甚至很多非计算机专业自学的。…

驱动day2:LED灯实现三盏灯的亮灭

head.h #ifndef __HEAD_H__ #define __HEAD_H__ #define PHY_PE_MODER 0x50006000 #define PHY_PF_MODER 0x50007000 #define PHY_PE_ODR 0x50006014 #define PHY_PF_ODR 0x50007014 #define PHY_RCC 0x50000A28#endif 应用程序 #include <stdio.h> #include <sys/…

Linux性能优化--补充

14.1. 性能工具的位置 本书描述的性能工具来源于Internet上许多不同的位置。幸运的是&#xff0c;大多数主要发行版都把它们放在一起&#xff0c;包含在了其发行版的当前版本中。表A-1描述了全部工具&#xff0c;提供了指向其原始源位置的地址&#xff0c;并注明它们是否包含在…

YOLOv7改进实战 | 更换轻量化主干网络Backbone(一)之Ghostnet

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

官方认证:研发效能(DevOps)工程师职业技术认证

培养端到端的研发效能人才 为贯彻落实《关于深化人才发展体制机制改革的意见》&#xff0c;推动实施人才强国战略&#xff0c;促进专业技术人员提升职业素养、补充新知识新技能&#xff0c;实现人力资源深度开发&#xff0c;推动经济社会全面发展&#xff0c;根据《中华人民共…

Apache Doris (四十五): Doris数据更新与删除 - Sequence 列

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 基本原理

WGCNA分析教程五 | [更新版]

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 往期WGCNA分析教程 WGCNA分析 | 全流程分析代码 | 代码一 WGCNA分析 | 全流程分析代码 | 代码二 WGCNA分析 | 全流程分析代码 | 代码四 关于WGCNA分析教程日常更新 学习无处不在&#xff0c;我们的教程会在…

从入门到进阶 之 ElasticSearch 配置优化篇

&#x1f339; 以上分享从入门到进阶 之 ElasticSearch 配置优化篇&#xff0c;如有问题请指教写。&#x1f339;&#x1f339; 如你对技术也感兴趣&#xff0c;欢迎交流。&#x1f339;&#x1f339;&#x1f339; 如有需要&#xff0c;请&#x1f44d;点赞&#x1f496;收藏…

浏览器不能访问阿里云ECS

一、浏览器不能访问端口 在阿里云ECS中构建了工程&#xff0c;nigix或者tomcat或者其他&#xff0c;然后在本地浏览器访问ip端口的时候&#xff0c;连接超时&#xff0c;解决办法&#xff1a; 进入阿里云ECS服务 -> 查看公网ip (外部连接需要使用公网) -> 进入ECS实例的…

攻防世界web篇-cookie

看到cookie立马就会想到F12键看cookie的一些信息 我这个实在存储里面看的&#xff0c;是以.php点缀结尾&#xff0c;可以试一下在链接中加上.php 得到的结果是这样 这里&#xff0c;我就只能上csdn搜索一下了&#xff0c;看到别人写的是在get请求中可以看到flag值

Mysql 约束,基本查询,复合查询与函数

文章目录 约束空属性约束默认值约束zerofill主键约束自增长约束唯一键约束外键约束 查询select的执行顺序单表查询排序 updatedelete整张表的拷贝复合语句group by分组查询 函数日期函数字符串函数数学函数其他函数 复合查询合并查询union 约束 空属性约束 两个值&#xff1a…

element-ui 以CDN 方式引入原生js开发的几个别坑 (+vue)

element-ui 以CDN 方式引入原生js开发的几个坑 最近两个月太忙了 忙的没空写文章 两个月赶出来了几个的项目 一个是雪佛兰裸眼3D的一个商品屏幕展示项目 一个是广汽云渲染的一个云看车项目 一个是奥迪中国充电桩的网页开发项目&#xff0c; 奥迪中国做个饭也是目前正在做的 不…

机器人SLAM与自主导航

机器人技术的迅猛发展&#xff0c;促使机器人逐渐走进了人们的生活&#xff0c;服务型室内移动机器人更是获得了广泛的关注。但室内机器人的普及还存在许多亟待解决的问题&#xff0c;定位与导航就是其中的关键问题之一。在这类问题的研究中&#xff0c;需要把握三个重点&#…

专题:链表常考题目汇总

文章目录 反转类型&#xff1a;206.反转链表完整版二刷记录 25. K个一组反转链表1 &#xff1a;子链表左闭右闭反转版本2 &#xff1a; 子链表左闭右开反转版本&#xff08;推荐&#xff09;⭐反转链表左闭右闭和左闭右开 合并类型&#xff1a;21.合并两个有序链表1: 递归法2: …

作为决策者,谁能拒绝这样一张数据可视化报表

数据分析是决策的一大助力&#xff0c;因此作为企业的管理决策者都会希望获得一份直观易懂、支持灵活自助分析的数据可视化报表&#xff0c;比如说由奥威BI数据可视化软件制作的这张BI报表。 名称&#xff1a;零售业数据分析驾驶舱 来源&#xff1a;奥威BI零售数据分析方案 …

pnpm的环境安装以及安装成功后无法使用的问题

文章目录 前言1、使用npm 安装2、安装后的注意点3、遇到问题4、配置path的环境变量&#xff08;1&#xff09;找到环境变量&#xff08;2&#xff09;找到并双击path的系统变量&#xff08;3&#xff09;复制第1步中使用npm安装的红框部分的路径&#xff08;4&#xff09;将第&…

【MySql】8- 实践篇(六)

文章目录 1. MySql保证主备一致1.1 MySQL 主备的基本原理1.2 binlog 的三种格式对比1.3 循环复制问题 2. MySql保证高可用2.1 主备延迟2.2 主备延迟的来源2.3 可靠性优先策略2.4 可用性优先策略 3. 备库为何会延迟很久-备库并行复制能力3.1 MySQL 5.6 版本的并行复制策略3.2 Ma…