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

进程的初步认识

  • 基本概念
    • 描述进程
      • 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就是命令行解释器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多线程---线程池

1.概述 线程池(Thread Pool)是一种多线程处理形式,它允许一个或多个线程并行执行,以减少在创建和销毁线程上花费的时间以及系统资源的开销。线程池不仅提高了程序的响应速度,还增强了系统的吞吐量。 线程池主要由一个或…

如果很穷,不妨试一下这个副业,搞钱最快的副业!

前言 相信每一位学习计算机的朋友都想利用自己所学的知识赚点生活费,我也不例外,哈哈哈,学了这么多年,总得让它发挥点价值不是吗。今天就跟大家分享一下我的真实经历,我是如何利用python兼职实现月收入破万的。下面是…

Qt之条件变量QWaitCondition详解(从使用到原理分析全)

QWaitCondition内部实现结构图: 相关系列文章 C之Pimpl惯用法 目录 1.简介 2.示例 2.1.全局配置 2.2.生产者Producer 2.3.消费者Consumer 2.4.测试例子 3.原理分析 3.1.源码介绍 3.2.辅助函数CreateEvent 3.3.辅助函数WaitForSingleObject 3.4.QWaitCo…

Github 2024-02-14 开源项目日报 Top9

根据Github Trendings的统计,今日(2024-02-14统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目4TypeScript项目1PowerShell项目1Java项目1JavaScript项目1Jupyter Notebook项目1非开发语言项目1Pyth…

C++面向对象程序设计-北京大学-郭炜【课程笔记(三)】

C面向对象程序设计-北京大学-郭炜【课程笔记(三)】 1、构造函数(constructor)1.1、基本概念 2、赋值构造函数2.1、基本概念2.1、复制构造函数起作用的三种情况2.2、常引用参数的使用 3、类型转换构造函数3.1、什么事类型转换构造函…

linux 安装 docker

环境介绍 centos 7.9 检查系统内核版本。确保CentOS 7系统的内核版本高于3.10,可以通过命令uname -r查看当前的内核版本。 使用root权限登录CentOS。确保yum包更新到最新,使用命令 yum update。 卸载旧版本的Docker(如果安装过旧版本的话…

【设计模式】0、uml 类图:关联、聚合、组合、依赖、继承、实现

文章目录 一、类的属性和方法二、类间的关系2.1 关联关系2.1.1 单向关联2.1.2 双向关联2.1.3 自关联 2.2 聚合关系2.3 组合关系2.4 依赖关系2.5 继承关系2.6 接口实现关系 一、类的属性和方法 类包含类名、属性(field)、方法(methods&#x…

第13章 网络 Page747~749 asio核心类 ip::tcp::resolver

3, ip::tcp::resolver 如果新浪的IP地址变了,该怎么办呢? ip::tcp::resolver 可以帮我们用上www.sina.com.cn,因为它负责将人类可读的多种网址信息,一步 到位地解析成ip::tcp::socket建立连接所需要的ip::tcp::endpoint结构&…

项目第一次git commit后如何撤销

问题描述: # 1. 新建gitcode目录,然后在目录下 git init# 2. 用idea打开目录后,新建.gitignore文件后 git add .git commit -m "init project"git log# 3. 就出现如下图情况目的:向撤销该次代码提交 # 仅撤销 git com…

Jenkins 2.426.3新版设置中文

1. 插件页面显示无法联网 ,点击Plugins一直提示连接超时,设置公司代理后 2. 稍等一会儿点击如下图,插件就出来了,然后输入Locale进行下载 3. 以下是我下载安装好的 4.打开设置,找到Locale选项,设置成zh_CN…

【总结】HTML+JS逆向混淆混合

国外的题果然考的与众不同 [secrypt_cen.html] 这次是HTML网页,然后JS加密判断 翻看JS代码 很显然,关键的代码在checkPassword JS混淆是必备的 去混淆一条龙走起 先将关键代码提取出来 JavaScriptfunction _0x4857(_0x398c7a, _0x2b4590) { const _0…

走进水墨世界,寻找传统之美

为深入了解中国传统水墨文化的底蕴及其在当代的价值,2024年2月16日,曲阜师范大学计算机学院“古韵新声,格物致‘知’”实践队的队员王涵智走进山东省高唐县巩德春艺术馆展开社会实践。实践队员以探访艺术馆为契机,领略传统水墨文化…

14. Longest Common Prefix(最长公共前缀)

问题描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 问题分析 方法一:我们可以假设一个字符串是最长的公共子串,然后去验证,如果此串被验证了,再增加一位字符进行验…

vue-自定义创建项目(六)

为什么要自定义创建项目? 因为VueCli默认创建的项目不能够满足我们的要求,比如默认的项目中没有帮我们集成路由,vuex,eslink等功能。 默认项目 自定义创建项目 流程: 创建项目命令:vue create custom_dem…

免费听歌软件,音乐搜索APP:掌中的音乐宝库,为您的音乐生活增添色彩

引言 在数字音乐的浪潮中,我们通常会想到QQ音乐、虾米、网易云音乐等主流平台APP。然而,这些商业软件在为用户提供服务的同时,也不可避免地伴随着一些限制和不尽如人意的地方,如曲库有限、音质不尽如人意或广告干扰或会员才能听歌…

2024年腾讯云4核8G12M轻量应用服务器测评,2月更新

4核8G服务器支持多少人同时在线访问?阿腾云的4核8G服务器可以支持20个访客同时访问,关于4核8G服务器承载量并发数qps计算测评,云服务器上运行程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素&…

美国突然致敬中本聪

作者:秦晋 有点看不懂美国的神操作。 2月16日,据《Bitcoin Magazine》报道,比特币的竞争对手、美国参议员伊丽莎白-沃伦对比特币的立场突然180度大转弯。由反对立场转为支持立场。让很多行业媒体出乎意料,甚至惊掉下巴。 报道称&a…

linux基础命令和示例

redis在go语言中的使用 以下说明以读者有redis基础的前提下进行 未学习redis的可以到b站1小时浅学redis了解大概,学会如何使用 【GeekHour】一小时Redis教程_哔哩哔哩_bilibili 以下开发环境以windows为测试环境,旨在练习redis在go语言中的使用 red…

深度学习系列58:大模型训练和压缩

1. 大模型训练 1.1数据并行 1.2 模型并行 1.3 ZeRO 1.4 流水线并行 1.5 混合精度训练 1.6 offloading 把梯度放在cpu上保存和计算 1.7 overlapping 提前传输数据 1.8 checkpointing 中间线性层不保存,反向传播时再次重新计算 1.9 使用BMtrain 2. 大模型压…

[HTML]Web前端开发技术26(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…