Linux基础-进程的超详细讲解(1)_进程的概念与属性

news2024/11/25 4:44:18

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

Linux基础-进程的超详细讲解(1)

收录于专栏[Linux学习]
本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌

目录

1. 进程的基本概念

2. 启动进程

3. 描述进程-PCB

tack_struct-PCB的一种

tack_struct内容分类

4. 组织进程

5. 查看进程

6. 通过系统调用获取进程标识符

7. 进程的cwd


1. 进程的基本概念

课本概念:程序的一个执行实例,正在执行的程序等

内核观点:担当分配系统资源(CPU时间,内存)的实体。 

2. 启动进程

把程序运行起来, 双击软件, ./XX.exe -> 本质就是在系统中启动了一个进程

执行完就退出 -- ls pwd等指令

一直不退, 直到用户退出 ---- 常驻进程 

3. 描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。

课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

tack_struct-PCB的一种

在Linux中描述进程的结构体叫做task_struct。

task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息 

tack_struct内容分类

标示符: 描述本进程的唯一标示符,用来区别其他进程。

状态: 任务状态,退出代码,退出信号等。

优先级: 相对于其他进程的优先级。

程序计数器: 程序中即将被执行的下一条指令的地址。

内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。

I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

其他信息 

4. 组织进程

可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。 

所以我们可以解决为什么要有PCB(task_struct), 因为OS要管理进程需要先描述在组织~~

进程 = 内核数据结构(task_struct) + 程序的代码和数据 

运行起来的程序 ---> 进程会根据task_struct属性被OS调度器调度, 运行! 

5. 查看进程

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

如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。 

 大多数进程信息同样可以使用top和ps这些用户工具来获取

比如我们写下这样一段代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
 while(1){
 sleep(1);
 }
 return 0;
}

我们让这个代码一直运行, 方便对他进行进程查看

 

这里为什么会有grep进程呢? 其实很简单, 因为grep也是一个进程!

我们要想去掉grep的信息, 可以使用下面的代码:

ps aux | grep text | grep -v grep

6. 通过系统调用获取进程标识符

进程id(PID)

父进程id(PPID)

假如我们编写如下代码:

我们可以使用系统命令-getpid()-getppid()查看进程id和与之对应的父进程id

编译形成可执行文件后运行:

我们查看一下mytext的父进程到底是谁:

查了一下bash, 惊奇的发现, bash的进程标识符与mytext的父进程一致!

由此我们可以发现, 我们的bash就相当于命令行解释器 ---> shell

命令行中, 执行命令/程序, 本质是bash的进程创建的进程, 由子进程执行我们的代码~~ 

7. 进程的cwd

进程的当前工作目录(Current Working Directory,CWD)是指在操作系统中,一个进程正在执行时的工作目录。它是进程在文件系统中的一个重要属性,对于文件路径的解析和文件操作有直接的影响。 

查看进程的cwd命令:

pwdx 命令专门用于显示进程的当前工作目录。

pwdx <pid>

我们可以发现, 当我们查询mytext进程时, 显示进程不存在, 是因为我们的程序已经结束了

查询它的父进程(也就是bash时), 它显示在我们当前的路径中, 也就是当前的工作路径 

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

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

相关文章

day-65 鸡蛋掉落-两枚鸡蛋

思路 动态规划&#xff1a;dp[i]表示i楼f确切的值的最小操作次数&#xff0c;对于上一次选择的楼层共有i-1种可能&#xff08;上一次从1楼,2楼…扔下&#xff09;&#xff0c;所以需要在i-1中可能中去最小值 解题过程 对于每一种可能&#xff0c;如dp[10]上一次从5楼扔下&…

ES-入门聚合查询

url 请求地址 http://192.168.1.108:9200/shopping/_search {"aggs": { //聚合操作"price_group":{ //名称,随意起名"terms":{ //分组"field": "price" //分组字段}}} } 查询出来的结果是 查询结果中价格的平均值 {&q…

KubeSphere部署mysql

演示示例使用的是3.4.1&#xff0c;各版本有名字差异 功能是一样的 由于mysql需要做数据持久化所以需要挂载数据 1.创建mysql基础配置 项目中-配置-配置字典 mysql-conf添加键值对 [client] default-character-setutf8mb4 [mysql] default-character-setutf8mb4 [mysqld] …

数据库设计与开发—初识SQLite与DbGate

一、SQLite与DbGate简介 &#xff08;一&#xff09;SQLite[1][3] SQLite 是一个部署最广泛、用 C 语言编写的数据库引擎&#xff0c;属于嵌入式数据库&#xff0c;其作为库被软件开发人员嵌入到应用程序中。 SQLite 的设计允许在不安装数据库管理系统或不需要数据库管理员的情…

QT QML 练习4

效果&#xff1a;鼠标按下Tab建可以选选择标签或者方块之间的切换 这段代码使用了 QtQuick 框架&#xff0c;创建了一个包含两个 Text 元素和两个嵌套 Rectangle 的用户界面。以下是对代码中涉及的主要知识点和实现细节的介绍&#xff1a; 知识点及代码细节介绍 导入 QtQuic…

SpringAOP学习文档

目录 一、概念二、示例代码三、切点1、execution2、within3、this4、target5、args6、annotation7、within8、target9、args10、组合切点表达式11、在Before注解中使用自定义的切入点表达式&#xff0c;以及切入点方法12、获取指定类型的真实对象 四、通知1、Around注解的通知方…

AI赋能,精准防控:AI智能分析网关V4人员徘徊算法的技术优势与应用场景

随着科技的飞速发展&#xff0c;视频监控系统在各个领域的应用越来越广泛&#xff0c;从公共安全到商业管理&#xff0c;再到交通监控等。AI智能分析网关V4作为新一代的视频分析设备&#xff0c;以其强大的智能分析能力和多样化的应用场景&#xff0c;成为市场关注的焦点。本文…

pytorch与卷积神经网络实战笔记

课程视频链接 CNN卷积神经网络算法原理 全神经网络的整体结构 输入层&#xff08;x1, x2, x3…&#xff09;->隐藏层&#xff08;全连接&#xff09;->输出层&#xff0c;整体就类似于一个函数&#xff0c;输入x&#xff0c;经过函数module(x)得到输出y的过程&#xf…

WPF常见容器全方位介绍

Windows Presentation Foundation (WPF) 是微软的一种用于构建Windows桌面应用程序的UI框架。WPF的布局系统基于容器&#xff0c;帮助开发者以灵活、响应的方式组织用户界面 (UI) 元素。本篇文章将详细介绍WPF中几种常见的容器&#xff0c;包括Grid、StackPanel、WrapPanel、Do…

SpringMVC源码-处理器适配器HandlerAdapter

因为定义controller的方式有三种&#xff0c;每种不同的方式调用的方法不同&#xff0c;尤其是注解修饰的 方法名是自定义的 因此需要通过适配器模式来调用方法执行 initStrategies进行适配器的初始化 处理器适配器一共有如下四种: org.springframework.web.servlet.Handl…

springboot系列--web相关知识探索五

一、前言 web相关知识探索四中研究了请求中所带的参数是如何映射到接口参数中的&#xff0c;也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索四中主要研究了复杂参数底层绑定原理。本次主要是研…

有效三⻆形的个数 05

有效三⻆形的个数 我写的 class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int sum0;for (int knums.length-1;k>1;k--) {int left0;int rightk-1;while(right>left) {if (nums[left]nums[right]>nums[k]) {sum(right-left);right--;…

QD1-P26、27、28 CSS 属性 文本

本节&#xff08;P26、27、28 三合一&#xff09;学习&#xff1a;CSS 文本属性。 ‍ 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p26 CSS&#xff08;层叠样式表&#xff09;中用于设置文本样式的属性有很多&#xff0c;以下是一些常用的文本属性&#xff1a; …

[数据结构]栈的实现与应用

文章目录 一、引言二、栈的基本概念1、栈是什么2、栈的实现方式对比3、函数栈帧 三、栈的实现1、结构体定义2、初始化3、销毁4、显示5、数据操作 四、分析栈1、优点2、缺点 五、总结1、练习题2、源代码 一、引言 栈&#xff0c;作为一种基础且重要的数据结构&#xff0c;在计算…

Mybatis高级查询-一对多查询

表介绍和表关系说明 新建以下4张表 tb_user&#xff1a;用户表 tb_order&#xff1a;订单表 tb_item&#xff1a;商品表 tb_orderdetail&#xff1a;订单详情表 【表关系】 1.tb_user和 tb_order表关系tb_user 《》 tb_order&#xff1a;一对多&#xff0c; 一个人可以下多…

Oracle漏洞修复 19.3 补丁包 升级为19.22

1.场景描述 上周末2024-10-12日,服务器扫出漏洞,希望及时修复。其中,oracle的漏洞清单如下,总结了下,基本都是 Oracle Database Server 的 19.3 版本到 19.20 版本和 21.3 版本到 21.11 版本存在安全漏洞,即版本问题。如: Oracle Database Server 安全漏洞(CVE-2023-22…

241013深度学习之GoogleLeNet

文章目录 1. GoogleLeNet2.Inception块3.googleLeNet模型4.训练模型4.1运行结果图 5.小结 1. GoogleLeNet 全称&#xff1a;含并行连接的网络 在2014年的ImageNet图像识别挑战赛中&#xff0c;一个名叫GoogLeNet (Szegedy et al., 2015)的网络架构大放异彩。 GoogLeNet吸收了N…

ZED相机的使用

ZED双目相机型号是ZED 2 立体相机&#xff08;ZED2 Stereo Camera&#xff0c;Stereolabs , San Francisco, USA&#xff09;&#xff0c;其中还包括USB 3.0 数据线&#xff0c;以及一个迷你三脚架。 一、查看自己的cuda nvidia-smi # 查看显卡驱动信息 nvcc -V # 查看CUDA的…

C++——vector的了解与使用

目录 引言 vector容器的基本概念 1.功能 2.动态大小 3.动态扩展 vector的接口 1.vector的迭代器 2.vector的初始化与销毁 3.vector的容量操作 3.1 有效长度和容量大小 (1)使用示例 (2)扩容机制 3.2 有效长度和容量操作 (1)reserve (2)resize 4.vector的访问操作…

电脑基础知识:mfc110.dll丢失的解决方法

1.mfc110.dll 丢失常见原因 mfc110.dll 文件的丢失或损坏是Windows系统中常见的问题&#xff0c;它可能由多种原因引起&#xff0c;以下是一些主要的因素&#xff1a; 不完全的软件卸载 在卸载程序时&#xff0c;如果相关的 DLL 文件没有被正确移除&#xff0c;可能会导致文件…