Linux进程详解一

文章目录

  • 进程
    • 进程PCB
    • task_struct
    • 查看进程
      • 方法一
      • 方法二

进程

教材观点

  • 加载到内存中的程序
  • 正在运行的程序

进程 = 内核PCB对象 + 可执行程序
内核数据结构 + 可执行程序 = 进程

  • 在计算机中可以同时打开多个程序,此时一定将多个.exe文件加载到了内存中

  • 操作系统需要管理多个加载到内存中的程序

  • 操作系统将加载到内存中的程序先进行描述,再进行组织管理、

    几乎所有的独立的指令也是程序,所有在执行指令的时候也要变成进程。

进程PCB

  • 一个进程就是操作系统对一个加载到内存中的程序的描述。
  • 每个进程都有一个描述这个进程所对应的一个结构体变量。这种数据结构结构体变量在操作系统层面中称为PCB(process ctrl block - 进程控制块)。
struct 
{//状态//优先级//内存指针字段//...包含进程几乎所有的属性字段struct PCB *next;  //指向下一个进程的PCB
}
  • 一个可执行程序加载到内存中,操作系统会先给这个进程创建一个PCB,这个pcb会有描述这个可执行程序的所有属性,以及指向这个进程代码块在内存中的位置的指针,再将这个进程的PCB链接到整个系统中的进程管理链表中。
  • 加载到内存中的可执行程序的代码块加上描述其的PCB才是一个进程
  • 先描述再组织

进程排队,是让进程的pcb去排队。
进程调度,是对进程的pcb进行调度。
所有对进程的控制和操作,都只和进程的PCB有关,和进程的可执行程序没有关系。

可以将pcb放入任何数据结构(容器)中,对pcb进行管理。
例如放入链表中,对pcb管理也就是对链表的结点进行管理。

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
课本上称之为PCB,Linux操作系统下的PCB是:task_struct

task_struct

Linux操作系统下的PCB是:task_struct
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM内存里面ing其包含进程的信息。

内容分类

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

查看进程

方法一

Linux会将进程信息以文件的方式,显示在系统中的某一个目录中
- `ls /proc`

Linux会将进程的相关信息,在/proc目录下,以一个目录的形式存放,这个进程的所有属性都存放在这个目录下面。

一个进程启动之后,将可执行程序删除,进程仍在执行。在运行一个程序的时候,本质是将程序从磁盘拷贝到了内存中。在程序执行期间,运行中的程序已经与磁盘中的程序没有了关联。

exe -> 指向可执行程序在磁盘中的具体位置
cwd -> 指向当前进程所对应的当前工作目录

  • int chdir(const char *path);
    • 更改当前进程的工作目录
    • 返回0成功,-1失败

方法二

  • ps axj
while :; do ps axj | head -1 && ps axj | grep myprogress | grep -v grep; sleep 1; done
死循环,先获取系统所有进程,然后打印所有进程中的第一行标题,再获取所有进程,然后筛选出带有myprogress关键字的进程打印,再将获取的所有带有myprogress关键字的进程中带有grep关键字的去除,每一秒循环一次。

用户要获取到进程的标示符,也就是pcb中的信息的时候,必须要调用系统调用,因为pcb在操作系统的内核中,用户不可以越过操作系统直接获取数据。

man2号手册

  • pid_t getpid(void) :获取进程标示符pid
  • pid_t getppid(void):获取当前进程的父进程标示符ppid

每一次启动一个程序,都会获得一个新的标示符id。
我们在命令行中启动的所有的程序,产生的进程都是bash的子进程。

一般在Linux中,所有普通进程都有其对应的父进程。

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

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

相关文章

iOS - 多线程-GCD

文章目录 iOS - 多线程-GCD1. 常见多线程方案2. GCD2.1 GCD的常见函数GCD中有2个用来执行任务的函数 2.2 GCD的队列2.2.1 GCD的队列可以分为2大类型 2.3 容易混淆的术语2.4.1 有4个术语比较容易混淆:同步、异步、并发、串行 2.4 各种队列的执行效果 3. 死锁3.1 死锁…

举例详解 TCP/IP 五层(或四层)模型与 OSI七层模型对比 (画图详解 一篇看懂!)

目录 一、为什么要对协议进行分层 1、什么是协议分层 2、协议分层的好处 二、TCP/IP 五层(或四层)模型 1、概念 应用层 传输层 网络层 数据链路层 物理层 2、举例详解 传输层 网络层 数据链路层 和 物理层 应用层 四、TCP/IP 五层&…

【多态】底层原理

博主首页&#xff1a; 有趣的中国人 专栏首页&#xff1a; C进阶 本篇文章主要讲解 多态底层原理 的相关内容 1. 多态原理 1.1 虚函数表 先看一下这段代码&#xff0c;计算一下sizeof(Base)是多少&#xff1a; class Base { public:virtual void Func1(){cout << &quo…

大模型培训老师叶梓:通过微调提升小型语言模型的复杂推理能力

在人工智能的快速发展中&#xff0c;复杂推理能力的提升一直是研究者们追求的目标。最近&#xff0c;一项发表在arXiv上的研究成果【1】&#xff0c;提出了一种创新的方法&#xff0c;即通过微调小型语言模型&#xff08;LMs&#xff09;&#xff0c;并将其与大型语言模型&…

LabVIEW轴承表面缺陷检测系统

LabVIEW轴承表面缺陷检测系统 为了解决轴承生产中人工检测效率低下、误检率高的问题&#xff0c;实现了一套基于LabVIEW的轴承表面缺陷自动检测系统。该系统利用工业相机采集轴承图像&#xff0c;通过图像处理技术对轴承表面的划痕缺陷和倒角缺陷进行自动识别和分析&#xff0…

Golang | Leetcode Golang题解之第43题字符串相乘

题目&#xff1a; 题解&#xff1a; func multiply(num1 string, num2 string) string {if num1 "0" || num2 "0" {return "0"}m, n : len(num1), len(num2)ansArr : make([]int, m n)for i : m - 1; i > 0; i-- {x : int(num1[i]) - 0fo…

033——项目管理

目录 1、 gitee标签管理 2、 新建issue 3、 issue关闭流程 026——项目管理与由来-CSDN博客 1、 gitee标签管理 级别从上到下依次降低。 2、 新建issue 新建issue必须包含四项&#xff0c;名称、标签、里程碑、描述信息。 描述信息尽量完全。 名称格式为【编号】【级别】…

Opencv_3_图像对象的创建与赋值

ColorInvert.h 如下&#xff1a; #include <opencv.hpp> using namespace std; #include <opencv.hpp> using namespace cv; using namespace std; class ColorInvert{ public : void mat_creation(); }; ColorInvert.cpp 文件如下&#xff1a; #include &q…

el-upload组件如何上传blob格式的url地址视频

el-upload组件如何上传blob格式的url地址视频 一、存在问题二、直接上代码 需求&#xff1a;想把视频地址url:“blob:http://localhost:8083/65bd3c0f-52ec-4844-b85e-06fdb5095b7b”&#xff0c;通过el-upload组件上传 el-upload是Element UI中用于文件上传的组件&#xff0c;…

ExcelVBA把当前工作表导出为PDF文档

我们先问问Kimi Excel导出为PDF的方法有多种&#xff0c;以下是一些常见的方法&#xff1a; 1 使用Excel软件的内置功能&#xff1a; 打开Excel文件&#xff0c;点击“文件”菜单。选择“另存为”&#xff0c;在“保存类型”中选择“PDF”。设置保存路径和文件名&#xff0c;点…

基于Tensorflow完成mnist数据集的数字手写体识别

基于Tensorflow完成mnist数据集的数字手写体识别 关于知识背景CNNFCNN 关于数据集新的改变 关于知识背景 CNN 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种具有局部连接、权值共享等特点的深层前馈神经网络&#xff08;Feed…

【Hadoop3.3.6】数据块副本放置策略及解析EditLog和FsImage

目录 一、摘要二、正文2.1 环境说明2.2 网络拓扑2.3 Hadoop副本放置策略介绍2.4 解析EditLog和Fsimage镜像文件三、小结一、摘要 通过解析存储于NameNode节点上的日志文件EditLog和镜像文件(元数据)Fsimage来反向验证HDFS的数据块副本存放策略,其目的是希望加深对Hadoop的数…