【Linux】进程的初步认识(一)

news2025/1/31 11:15:00

进程的初步认识

  • 基本概念
    • 描述进程
      • task_struct-PCB的一种
      • task_stuct内容分类
  • 查看进程
  • 通过系统调用获取进程标识符

基本概念

  要了解进程,首先我们要知道两点

  1. 我们可以同时启动多个程序,也就意味着我们可以将多个.exe文件加载到内存
  2. 操作系统如何去管理这些进程?操作系统实际上是不认识这些可执行程序的,它能控制进程实际上是遵循了“先组织,后描述”的设计理念(即先将这些可执行程序的基本属性,如名称、状态、调用接口等定义成一个结构体,然后通过链表或者其他数据结构对其进行管理)
    大致可以将该结构体理解成以下形式
struct xxx
{
    //状态
    //优先级
    //内存指针字段(为了运行这个程序,应该去哪里找对应程序的代码)
    //标识符
    //......(包含所有进程几乎所有的属性字段)
    //struct xxx*next;
};

描述进程

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的结合
  • 一般我们称进程控制块为PCB(process control block),Linux操作系统下的PCB是:task_struct

task_struct-PCB的一种

  • 在Linux中描述进程的结构体就叫做task_struct
  • task_struct是Linux内核的一种数据结构,它会被装载到PAM(内存)里并且包含着进程的信息

  那么什么是进程呢?进程 = 内核pcb对象(内核数据结构) + 可执行程序
  在了解以上知识后,我们就不难理解:假设可执行程序的大小为1M,加载到内存时,实际上操作系统为了在内存中为了管理这个进程,实际开辟的空间是要大于1M,多出来的空间就为结构体对象pcb。
  一个可执行程序加载到内存中还不够,系统还会建立对应的pcb对象,并将这些对象放到一个整个系统层面的链表当中,系统拿到pcb的链表,对进程的管理就变成了对整个pcb链表的管理,未来所有对进程的管理工作就只和进程的PCB有关而与可执行程序无关
  另外,可以将PCB对象放到放入到任何数据结构中,比如:当一个可执行程序需要被CPU进行调用时,操作系统就会将PCB对象放到CPU的运行队列中等待CPU进行调用。所以,我们又可以得出一个结论:进程排队本质上是让PCB对象排队

task_stuct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。 I/O状态信息:
  • 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。(比如当执行到C语言的printf函数的时候,操作系统就需要暂时将屏幕的使用权给该程序,当执行完之后不需要用到屏幕,就将屏幕的使用权归还给操作系统)
  • 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

  这里简单介绍一下程序计数器,CPU中有一个寄存器叫做PC指针或者叫做eip寄存器,这里面存的是当前正在被执行指令的下一行指令的地址,通过对程序计数器的初步了解,我们可以知道以下两点

  1. 编程语言语法中的判断、循环和函数跳转的本质其实就是修改PC指针
  2. PC指针指向哪个进程代码就表示哪个程序正在被调度执行

查看进程

查看进程信息可以使用ps axj指令
在这里插入图片描述
当我们运行一个程序,比如编译好的代码
在这里插入图片描述
然后我们要去查看可执行程序为mybin的进程
在这里插入图片描述
  几乎所有的指令,就是程序,运行起来也要编程进程

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

  在Linux中,普通进程都会有它的父进程

  • 进程id(PID)
  • 父进程(PPID)

  在Linux中获取进程id和父进程id的方式就是getpid和getppid两个函数,为了了解这两个函数,现在man手册中查一下它们的信息
在这里插入图片描述

现在再将之前的代码做一些修改
在这里插入图片描述
发现每次的子进程id都会改变,但是父进程id不变
在这里插入图片描述

通过父进程id找到这个进程,发现这个进程是bash,所以我们在命令行当中启动的程序最终转化成进程都是bash的子进程,而bash就是命令行解释器

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

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

相关文章

kettle--JavaScript脚本日期使用

输入日期为20240216,运行如下代码,结果为true var reportdate parent_job.getVariable("v_reportdate"); var date_type parent_job.getVariable("v_date_type"); var reportdate_freportdate.substr(0,4) "/" report…

如何在亚马逊,美客多,阿里国际,速卖通上安全地进行自养号测评?

借鉴亚马逊等跨境电商市场的经验,我们建议选取具备以下特点的产品在平台上销售,以实现需求稳定、竞争较低、利润较高,同时规避法律纠纷和质检问题。首先,应选择体积小、重量轻、易于运输的商品,这有助于降低运输成本和…

Ant Design Card 组件展示图片

文章目录 Ant Design Card 组件展示图片理解card组件结构隐藏卡片内容区域 下拉时加载图片卡片加载更多代码 分页的方式加载图片列表【推荐】实现思路代码demo缩略图在card组件下发显示图片文件名卡片操作 分页 Ant Design Card 组件展示图片 官方文档: Card卡片组…

Leetcode-429.N叉树的层序遍历

题目: 给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。 树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。 示例 1: 输入&#xff…

电脑mp4格式视频打不开?别急,教你轻松解决问题

在数字化时代,MP4格式是广泛应用于视频存储和分享的一种常见格式。然而,有时候我们可能会遇到电脑mp4格式视频打不开的情况。无论您是经常处理视频的专业人士,还是普通用户在观看视频时遇到问题,接下来,让我们一同探索…

GPT-4助力我们突破思维定势

GPT-4在突破思维局限、激发灵感和促进知识交叉融合方面的作用不可小觑,它正逐渐成为一种有力的工具,助力各行业和研究领域的创新与发展。 GPT-4在突破传统思维模式、拓宽创新视野和促进跨学科知识融合方面扮演着越来越重要的角色: 突破思维…

解码成功:从8000万到110亿,鸭鸭羽绒如何练就100倍逆势增长奇迹?

鸭鸭羽绒100倍增长奇迹 在现今市场环境中,许多企业都面临着增长乏力的问题,仿佛陷入了无法突破的困境。然而,总有一些企业能够在这样的环境中独树一帜,表现出色。鸭鸭羽绒就是这样一个典型的例子。尽管整个经济环境并不理想&…

【RT-DETR有效改进】利用EMAttention加深网络深度提高模型特征提取能力(特征选择模块)

一、本文介绍 本文给大家带来的改进机制是EMAttention注意力机制,它的核心思想是,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中的通道权重,并通过跨维度交互来捕获像素级…

CSS 故障的效果(仿抖音)

<template><!-- 创建一个视图容器,用于装载加载动画 --><view class="loader"><!-- 使用data-glitch属性存储原始文本内容,在CSS中通过attr()函数获取 --><view data-glitch="加载中..." class="glitch">加载中…

[力扣 Hot100]Day28 两数相加

题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都…

揭秘铷原子钟:北斗卫星系统的“心脏”

揭秘铷原子钟&#xff1a;北斗卫星系统的“心脏” 近日&#xff0c;中国科学院精密测量科学与技术创新研究院的梅刚华团队发布了一项重要成果。他们成功将铷原子钟的短期频率稳定度提高到了E-14&#xff08;即10的负14次方&#xff0c;相当于百万亿分之一&#xff09;的量级&a…

AMD FPGA设计优化宝典笔记(5)低频全局复位与高扇出

亚军老师的这本书《AMD FPGA设计优化宝典》&#xff0c;他主要讲了两个东西&#xff1a; 第一个东西是代码的良好风格&#xff1b; 第二个是设计收敛等的本质。 这个书的结构是一个总论&#xff0c;加上另外的9个优化&#xff0c;包含的有&#xff1a;时钟网络、组合逻辑、触发…

【JavaScript】面试手写题精讲之数组(下)

引入 这章主要讲的是数组的排序篇&#xff0c;我们知道面试的时候&#xff0c;数组的排序是经常出现的题目。所以这块还是有必要进行一下讲解的。笔者观察了下前端这块的常用算法排序题&#xff0c;大概可以分为如下 冒泡排–> 稳定排序插入排序–> 稳定排序选择排序–…

C++文件操作->文本文件(->写文件、读文件)、二进制文件(->写文件、读文件)

#include<iostream> using namespace std; #include <fstream>//头文件包含 //文本文件 写文件 void test01() { //1.包含头文件 fstream //2.创建流对象 ofstream ofs; //3.指定打开方式 ofs.open("test.txt", ios::out); //4.写…

教程10 Vue3的生命周期与方法(Typescript)+ Setup语法糖详解 + setup中的生命周期钩子(代码截图版)

一、Vue3的生命周期及在setup中的生命周期钩子 Vue官网&#xff1a;https://cn.vuejs.org/api/composition-api-lifecycle.html 在Vue3中&#xff0c;生命周期勾子函数被重新设计&#xff0c;以更好地支持组合式API的使用。 1、Vue3中的生命周期勾子函数 setup&#xff1a;…

【sql】sqlite3数据库

一、介绍 SQLite是一个轻量级的、开源的嵌入式数据库&#xff0c;由D. Richard Hipp使用C语言编写。由于其资源占用少、性能良好和零管理成本的特点&#xff0c;SQLite在嵌入式系统中得到了广泛应用&#xff0c;如Android和iPhone等操作系统中都有内置的SQLite数据库供开发人员…

华为智慧屏推出多种功能,春节期间全家一起玩乐 /腾讯广告妙思:一站式AI广告创意平台|魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 华为智慧屏推出多种功能&#xff0c;春节期间全家一起玩乐 腾讯广告妙思&am…

表的操作【mysql数据库】

目录 一、创建表 二、查看表 三、修改表 改表名&#xff1a; 新增一列&#xff1a; 修改某列的属性&#xff1a; 删除某列&#xff1a; 改列名 四、删除表 一、创建表 二、查看表 desc&#xff1a;查看表的详细信息 查看建表时的详细信息&#xff1a; 三、修改表 改表…

win10下wsl2使用记录(系统迁移到D盘、配置国内源、安装conda环境、配置pip源、安装pytorch-gpu环境、安装paddle-gpu环境)

wsl2 安装好后环境测试效果如下&#xff0c;支持命令nvidia-smi&#xff0c;不支持命令nvcc&#xff0c;usr/local目录下没有cuda文件夹。 系统迁移到非C盘 wsl安装的系统默认在c盘&#xff0c;为节省c盘空间进行迁移。 1、输出wsl -l 查看要迁移的系统名称 2、执行导出命…

C#,二进制数的按位旋转(Bits Rotate)算法与源代码

1 二进制数的按位旋转 二进制数的按位旋转&#xff08;翻转&#xff09;是编程中常见的按位运算方法。 二进制数的按位旋转分为左转、右转。 左转意味着数据变大&#xff0c;右转意味着数据变小&#xff08;有损&#xff09;。 2 源程序 using System; using System.Text; us…