进程详解

进程

进程是什么

进程: 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
进程 = 代码 + 数据 + pcb
pcb一般都叫task_struct

pcb是什么

pcb是一种用来管理进程信息的数据结构
进程信息被存放在进程信息控制块的结构中
当程序运行起来时,可执行程序会被加载到内存中;众所周知我们的计算机不可能只有一个应用正在执行,可能是5个,10个程序同时执行,我们的计算机就是通过pcb这种结构来对他们进行链式管理

typedef struct task_struct
{
//众多信息
}pcb;

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

标识符——pid/ppid

我们先来看看我们的进程长什么样子
在这里插入图片描述
第一个是执行起来的程序——mybin;第二个是grep,grep执行起来也是一个程序我们使用的命令行基本上都是一个执行起来的程序,它用来查找mybin,所以他也包含mybin的关键字,我们使用grep -v grep来忽略grep
在这里插入图片描述

获取标识符——pid/ppid

获取id的函数时getpid,getppid——本别时获取本进程和获取父进程
在这里插入图片描述
在这里插入图片描述
可以看到pid_t getpid是一个系统函数pid_t是c语言上的整数类型谁调用这个函数,就返回谁的pid
使用这段代码进行连续观测,每一秒打印一次进程信息(现在打印的是表头信息)
获取自己的进程(pid)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通常使用ctrl+c终止进程
以上就获取到了自己的进程
接下来获取父进程(ppid)

在这里插入图片描述
我们发现了一个奇怪的点每次自己的进程编号都是不一样的,但是每次的父进程都是一样的`
在这里插入图片描述
通过查看ppid的进程得知:父进程是bash;bash是命令行解释器,所有的进程都是由bash创建的

进程运行的地址
在本路径下生成并执行文件,使用ls /proc/28300(进程id) -l显示进程信息
需要补充的是:在linux中进程是被当作文件进程记录的
在这里插入图片描述
在这里插入图片描述

cwd表示进程的工作目录
exe表示文件的执行地址

我们来回忆一下c语言中的文件操作fopen("file.txt","w");//如果没有就在当前的工作目录下新建一个
重定向到已有的目录下
我们使用chdir改变文件工作目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们能看到,虽然exe文件还在/home/user1/12_3/路径下,但是我们的cwd已经改变位置了,新生成的文件也是在新的路径下
重定向到没有的目录下
tem1是个没有的文件夹
补充
chdir有两个返回值,重定向成功返回0,重定向失败返回-1
在这里插入图片描述
在这里插入图片描述
经过分析,可以改变程序的工作目录,只能重定向到已经存在的目录,如果重定向到不存在的目录就会产生错误

也可以使用移动可执行程序的目录的方式进行重定向
将文件直接放到上层目录中
在这里插入图片描述
在这里插入图片描述
这种更加证明了执行的目录默认就是工作目录,也就是说cwd和exe目录是一样的

进程状态——stat

r运行——运行状态
s浅层睡眠——(可中断睡眠)s后台运行(不可以被杀掉),s+前台运行(可以杀掉)
d深度睡眠——(不可中断睡眠)当资源紧张时,系统准备杀死进程,但是进程是一个重要的进程,不能被删除,就需要d状态来躲避
t暂停
z僵尸——需要使用父进程进行回收
当进程退出时,会保留pcb,保留相应的信息,只有父进程读取才能进行释放
x死亡

观察r状态和s状态
在这里插入图片描述
在这里插入图片描述

从图中看到子进程和父进程都是被创建出来了,并且父进程和子进程的状态都是s+,可是他为什么是s+状态呢,他们都是正在运行的呀,原因就是进程确实是在运行,计算机计算速度非常的快,运行完打印之后,会有2秒的休眠,那么就知道了,程序的大部分时间都处于sleep状态

在这里插入图片描述
在这里插入图片描述
去掉sleep函数,就只有函数执行,也就顺理成章的成为r状态

孤儿进程

孤儿进程就是没了父进程,孤儿进程一般会被父进程的父进程领养,但是对于子进程下有子进程,形成父进程——子进程——孙子进程,如果将子进程杀掉,孙子进程和父进程变化就不同寻常了(不需要管)
在这里插入图片描述
在这里插入图片描述

父进程死后只剩子进程,子进程被pid为1的进程接管,并且子进程成为后台进程,不能被ctrl+c杀掉,只能使用kill杀掉

kill -l查看所有kill参数,kill -9 pid杀掉匹配pid进程
在这里插入图片描述
在这里插入图片描述
1就是系统进程

前台进程不能输入命令行
在这里插入图片描述

但是后台进程可以输入命令行
在这里插入图片描述

进程优先级

为什么要有优先级
在计算机中,资源是有限的,对于所有的进程,需要进行排队,进行有次序的运行
由pid进行排序,pid=pid(old)+nice
在这里插入图片描述

NI——nice
pid:[60 ,99],数字越小,优先级越高
nice:[-20,19]
具有优先级显然是好的,但是对于程序员来说,最好是不要调整优先级,优先级还是让os自己调整吧

操作系统中有分时操作系统:每个进程都是可以运行到的——当一个进程的时间片用完了,就发出陷入信号,交还os权限,在转换进程

学习大佬的优秀文章
进程和程序
linux中gdb多进程调试

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

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

相关文章

Qt创建和使用动态库链接

首先建立库文件 顺序确认完成后,构建完成 注意:上图中mydll_global.h中的内容可以复制到mydll.h中去,在以后调用时只调用mydll.h即可,否则调用时需要两个头文件同事使用。 在mydll.h和mydll.cpp中可以正常编写代码&#xff…

Geoserver发布2000坐标系遇到的问题总结

在Geoserver上发布2000坐标系的服务时,要想正常发布服务,不仅仅是要涉及2000坐标系,还需要在发布的时候选择对坐标系。具体问题描述如下: 1.问题描述: 在发布好2000坐标系的服务后,在超图的平台加载服务时&…

Scrapy爬虫数据存储为JSON文件的解决方案

什么是JSON文件 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成。它基于JavaScript Spark语言的一个子集,但独立于Smashing语言,因此在许多中…

观测云实现日志存储与分析 10 倍性价比提升|SelectDB 技术团队

作者:观测云 CEO 蒋烁淼 & 飞轮科技技术团队 在云计算逐渐成熟的当下,越来越多的企业开始将业务迁移到云端,传统的监控和故障排查方法已经无法满足企业的需求。而观测云可提供整体数据的分析、洞察、可视化、自动化、监测告警、智能巡查…

基于ssm的房屋租售网站的设计与实现论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对房屋租售信息管理混乱,出错率高,信息安全性差…

解析操作系统是如何启动起来的?

操作系统被称为“第一个程序”,the first programme,原因很简单,只有当操作系统启动起来后才能运行我们编写的程序,那么你有没有想过这个问题:操作系统是怎样启动起来的呢?实际上这个过程就像发射火箭一样有…

kuboard如何部署redis?

在K8S上部署redis 如 在K8S上部署mysql 所述,auth-server、user-center、api-gateway 都需要使用 redis 服务,本文描述如何使用 Kuboard 在 Kubernetes 上部署 redis。 本文将使用 redis官方镜像 进行部署。 部署redis 在 Kuboard 界面进入名称空间 …

Leetcode—2477.到达首都的最少油耗【中等】

2023每日刷题&#xff08;五十&#xff09; Leetcode—2477.到达首都的最少油耗 算法思想 参考自灵茶山艾府 实现代码 class Solution { public:long long minimumFuelCost(vector<vector<int>>& roads, int seats) {int n roads.size() 1;vector<i…

iNet Network Scanner for Mac:简洁高效的WiFi网络扫描软件

随着无线网络的普及&#xff0c;WiFi网络已经成为我们日常生活中必不可少的一部分。无线网络的稳定性和速度对我们的工作和娱乐体验至关重要。因此&#xff0c;一款功能强大、简洁高效的WiFi网络扫描软件非常重要。今天&#xff0c;我们向大家推荐一款优秀的Mac平台WiFi网络扫描…

【软件测试】技术精选:Jmeter常见的几种报错

1、Java.net.UnknownHostException 这个错的含义是 没有连接到服务器地址&#xff0c;因此很可能是 内部网络中断导致。 2、502 Bad gateway 这个和本地的线程数无关 可能原因是网络抖动不稳定导致 3、java.net.SocketException: Socket closed 强制停止线程&#xff0c;连接…

Python绘图坐标轴数字要求三位分节的处理方法

比如说1000&#xff0c;用三位分节法的写法就是1 000&#xff0c;咱们操作的时候可以先式化字符串&#xff0c;用千位分隔符表示数字就是1,000&#xff0c;再把逗号换成空格。 import matplotlib.pyplot as plt import matplotlib.ticker as ticker# 示例数据 x [1000, 2000, …

vue 过滤器 (filters) ,实际开发中的使用

在实际开发中要判断不同的状态,要写很多重复的代码, 类似这样: 这样学麻烦, 不方便维护, 这时候可以用 filters 过滤器 在页面这样写就可以了

PET(Point-Query Quadtree for Crowd Counting, Localization, and More)

PET&#xff08;Point-Query Quadtree for Crowd Counting, Localization, and More&#xff09; 介绍实验记录训练阶段推断阶段 介绍 论文&#xff1a;Point-Query Quadtree for Crowd Counting, Localization, and More 实验记录 训练阶段 TODO 推断阶段 下面是以一张输…

4.8 构建onnx结构模型-Less

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Less 结点进行分析 方式 方法一&a…

Openfire CVE-2023-32315(metasploit版)

step1&#xff1a;用docker搭建环境 Step2&#xff1a;docker查看映射端口 Step3&#xff1a;打开mysql和apache2&#xff0c;访问特定端口&#xff0c;然后靶标应用。 Step4&#xff1a;用metasploit进行攻击&#xff1a; 首先&#xff0c;打开metasploit&#xff0c;然…

Python-条件判断(if语句详解)

条件判断 python代码执行从上到下&#xff0c;默认没有main函数 如果 否则 写法一&#xff1a;if if expression: do_something1 do_something2 ... next_something#一定会执行&#xff0c;和判断条件无关 if a > b:#执行语句1#执行语句2#执行语句3#... #执行语…

java第三十课

电商项目&#xff08;前台&#xff09;&#xff1a; 登录接口 注册接口后台&#xff1a; 注册审核&#xff1a;建一个线程类 注意程序中的一个问题。 这里是 5 条记录&#xff0c;2 条记录显示应该是 3 页&#xff0c;实际操作过程 有审核机制&#xff0c;出现了数据记录动态变…

【从删库到跑路 | MySQL数据库总结篇】JDBC编程

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、前言…

共建共创 | 紫光展锐-中国电信“终端测试与创新联合实验室”正式成立

近日&#xff0c;紫光展锐携手中国电信正式成立“终端测试与创新联合实验室”&#xff0c;这标志着紫光展锐在功能、协议、互操作性等测试方面的创新能力和持续发展能力获得认可&#xff0c;为进一步提升通信技术&#xff0c;助推终端厂商产品加速上市奠定了坚实的基础。 2023年…

网络之路26:STP生成树协议

正文共&#xff1a;2222 字 19 图&#xff0c;预估阅读时间&#xff1a;3 分钟 目录 网络之路第一章&#xff1a;Windows系统中的网络 0、序言 1、Windows系统中的网络1.1、桌面中的网卡1.2、命令行中的网卡1.3、路由表1.4、家用路由器 网络之路第二章&#xff1a;认识企业设备…