当前位置: 首页 > news >正文

Linux -- 进程初印象

目录

预备知识

切入点

PCB

看见进程

pid

getpid 函数


预备知识

Linux -- 冯诺依曼体系结构(硬件)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/2301_76973016/article/details/143598784?spm=1001.2014.3001.5501

Linux -- 操作系统(软件)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/2301_76973016/article/details/143606208?spm=1001.2014.3001.5501

切入点

电脑是不是一次只能启动一个程序?不是的,电脑可以同时启动多个程序,我们打开微信的同时,也可以打开音乐软件听歌,不会因为打开了微信就不能听歌了。

每个程序都要加载到内存中才能执行,操作系统要不要管理被加载到内存的多个程序呢?显然是需要的。

那么操作系统如何管理加载到内存的程序呢?先描述再组织!

PCB

我们需要定义结构体 PCB(Process Control Block,即进程控制块),结构体中通常包含以下信息:

  1. 进程标识符:每个进程有一个唯一的标识符,以便操作系统可以区分不同的进程。
  2. 处理器状态信息:包括程序计数器、寄存器集合、条件码等,这些信息在进程切换时会被保存起来,以便进程重新获得CPU时间时恢复执行。
  3. 内存管理信息:比如进程地址空间的描述符,页表基址等,用于支持虚拟内存管理。
  4. 会计信息:例如进程开始时间、结束时间、使用的资源量等,用于性能监控和计费。
  5. 优先级信息:用于决定进程调度策略,高优先级的进程会优先得到CPU时间。
  6. 状态信息:进程的状态(如运行、就绪、等待等),这决定了进程在系统中的处理方式。
  7. I/O状态信息:包括打开文件列表、I/O缓冲区等,用于管理进程的输入输出操作。
  8. 其他信息:可能还包括安全信息、进程关系(父进程、子进程)等。

把程序加载到内存之后,操作系统并不认识这些程序,为了更好的管理这些程序,每一个进程都有自己的 PCB,PCB 中记录了进程的信息和属性,这样操作系统才可以管理这些进程,从此之后,对进程的管理,就变成了对 PCB 链表的增删查改

PCB 链表组成了运行队列,运行队列中排队的是 PCB,每个 PCB 都会指向自己的可执行程序,CPU 在进程调度时,让进程去排队,本质上是让进程的 PCB 去排队,而不是可执行程序在排队,CPU在调度一个进程,只要找到PCB就可以,找到PCB就可以找到可执行程序,程序就可以执行了。

在Linux中,PCB 叫做 task_struct.

看见进程

pid

在计算机操作系统中,每个正在运行的进程都会被分配一个唯一的PID。当用户或应用程序需要与某个特定的进程交互时,可以通过PID来指定目标进程。例如,在 Linux 中,可以使用 kill命令加上PID来终止某个进程;使用 ps命令查看当前系统中所有进程的信息,其中包括每个进程的PID。

getpid 函数

getpid 是一个系统调用,用于获取当前进程的进程标识符 PID,需要包含  unistd.h 头文件 ,函数的返回值类型为 pid_t,它是一个整型类型,专门用于存储和处理进程ID,pid_t 通常在 <sys/types.h> 头文件中定义,有时也会在 <unistd.h> 中定义。

用以下代码来查看 pid: 

#include<iostream>
using namespace std;
#include <unistd.h>int main()
{while(1){cout<<"process pid:"<<getpid()<<endl;sleep(1);}return 0;
}
testProcess:test.ccg++ -o $@ $^ -std=c++11.PHONY:clean
clean:rm -f testProcess

 运行代码:

可以看出当前进程的 pid 为 75735,每个进程的 pid 都是不一样的,当我们再次运行同一份代码时,会重新创建进程,此时进程的 pid 和上一次运行时的 pid 是不一样的:

当代码运行起来的同时,命令 while :;do ps ajx | head -1 && ps ajx | grep testProcess | grep -v grep;sleep 1;done 可以帮助我们看到进程的开始和结束:

相关文章:

Linux -- 进程初印象

目录 预备知识 切入点 PCB 看见进程 pid getpid 函数 预备知识 Linux -- 冯诺依曼体系结构&#xff08;硬件&#xff09;-CSDN博客https://blog.csdn.net/2301_76973016/article/details/143598784?spm1001.2014.3001.5501 Linux -- 操作系统&#xff08;软件&#xf…...

【超级简单】Facebook脸书视频下载一键保存手机

Facebook作为目前服务全球30亿用户&#xff0c;尤其是出海和跨境用户没有办法忽视的平台&#xff0c;提供了一个在线平台&#xff0c;使用户分享照片、视频、状态更新和链接等内容&#xff0c;然而&#xff0c;令人遗憾的是&#xff0c;用户没有办法直接将照片和视频保存到本地…...

昇思大模型平台打卡体验活动:项目2基于MindSpore通过GPT实现情感分类

昇思大模型平台打卡体验活动&#xff1a;项目2基于MindSpore通过GPT实现情感分类 1. 载入与处理数据集 在情感分类任务中&#xff0c;我们使用了IMDB数据集&#xff0c;首先需要对数据进行加载和处理。由于原数据集没有验证集&#xff0c;我们将训练集重新划分为训练集和验证…...

【JAVA】会员等级互通匹配数据库表设计

1、使用数据库&#xff1a;mysql数据库 设计四张表&#xff1a; 会员互通合作商配置表 会员互通合作商会员等级配置表 会员互通合作日志表 会员互通合作等级映射表 CREATE TABLE user_level_partner ( id bigint NOT NULL AUTO_INCREMENT, partner_novarchar(100) DE…...

论文阅读:基于语义分割的非结构化田间道路场景识别

论文地址&#xff1a;DOI: 10.11975/j.issn.1002-6819.2021.22.017 概要 环境信息感知是智能农业装备系统自主导航作业的关键技术之一。农业田间道路复杂多变&#xff0c;快速准确地识别可通行区域&#xff0c;辨析障碍物类别&#xff0c;可为农业装备系统高效安全地进行路径规…...

linux部分问题以及解决方式

目录 1.ubuntu桌面不显示了&#xff0c;只有命令行1.1启动gdm3服务1.2安装lightdm桌面管理包 1.ubuntu桌面不显示了&#xff0c;只有命令行 有如下两种解决方式。 1.1启动gdm3服务 这种方法只能临时生效&#xff0c;每次重启都要手动启动 sudo service gdm3 restart 1.2安装…...

qt QTreeWidget详解

1、概述 QTreeWidget 是 Qt 框架中的一个类&#xff0c;用于以树形结构展示数据。它基于 QTreeView 并提供了更高级别的接口&#xff0c;使得添加、删除和管理树形结构中的项变得更加简单。QTreeWidget 支持多级嵌套&#xff0c;每个项&#xff08;QTreeWidgetItem&#xff09…...

注意力机制的目的:理解语义;编码器嵌入高纬空间计算;注意力得分“得到S*V”;解码器掩码和交叉注意力层用于训练;最终的编码器和输出实现大模型

目录 注意力机制的目的:理解语义中的它是小白兔 词编码器嵌入高纬空间 计算注意力得分“得到S*V” 权重QKV:连接权重 训练阶段使用解码器:翻译后的语句 解码器掩码和交叉注意力层用于训练 最终的编码器和输出实现大模型 Transformer模型中,QKV QKV的作用 举例说明…...

[java][jdk]JDK各个版本的核心特性

JDK 8至JDK 21的主要新特性概览&#xff1a; JDK 8 Lambda表达式&#xff1a;引入了函数式编程的特性&#xff0c;使得代码更加简洁和灵活。Stream API&#xff1a;提供了一种新的抽象&#xff0c;可以让你以声明性方式处理集合数据。新的日期和时间API&#xff1a;引入了jav…...

双十一”买买买!法官告诉你注意这些法律问题

“双十一”等购物节来临之际&#xff0c;某些电商平台为了吸引消费者提前下单预订商品&#xff0c;通过大力宣传付定金可享受更多优惠等方式开启预售模式。那么&#xff0c;如果消费者在支付定金后&#xff0c;因各种原因最终没有支付尾款&#xff0c;能否要求商家退还定金&…...

PyQt5

基于PyQt5的重绘机制实现加载页面 效果预览代码说明控件初始化超时回调重绘事件缩放事件 代码获取 效果预览 直接看图&#xff0c;效果展现为跟随黑点顺时针转动&#xff0c;且有明暗变化 代码说明 控件初始化 initUI主要用于初始化用户界面(UI)。它创建了一个具有特定样式…...

【Linux】常用命令(2.6万字汇总)

文章目录 Linux常用命令汇总1. 基础知识1.1. Linux系统命令行的含义1.2. 命令的组成 2. 基础知识2.1. 关闭系统2.2. 关闭重启2.3. 帮助命令&#xff08;help&#xff09;2.4. 命令说明书&#xff08;man&#xff09;2.5. 切换用户&#xff08;su&#xff09;2.6.历史指令 3.目录…...

Vue3-06_路由

路由 后台路由是根据请求url&#xff0c;匹配请求处理的后台模块&#xff08;路径&#xff09; 前台根据访问路径&#xff0c;决定显示的内容。 路由就是&#xff1a; 访问hash 与内容的对应关系 路由的工作方式 用户点击页面的路由链接导致url地址栏中的Hash值发生了变化前…...

物理验证Calibre LVS | SMIC Process过LVS时VNW和VPW要如何做处理?

SMIC家工艺的数字后端实现PR chipfinish写出来的带PG netlist如下图所示。我们可以看到标准单元没有VNW和VPW pin的逻辑连接关系。 前几天小编在社区星球上分享了T12nm ananke_core CPU低功耗设计项目的Calibre LVS案例&#xff0c;就是关于标准单元VPP和VBB的连接问题。 目前…...

量化分析工具日常操作日记-5-通合科技

使用量化分析微信小程序工具“梦想兔企业智能风险分析助手”日常操作日记-5-军工-通合科技&#xff08;300491&#xff09;。 周末国家新政策&#xff0c;要大力支持军工行业&#xff0c;我用工具挖掘了两个低位股&#xff0c;供大家参考。通合科技&#xff08;300491&#xff…...

windows和linux验证MD5码方式

一、linux linux自带MD5码验证&#xff1a; $ md5sum target_file.txt 二、windows windows自带的MD5码验证&#xff1a; $ certutil -hashfile target_file.txt MD5...

构造函数原型对象语法、原型链、原型对象

目录 一、前言 二、编程思想 面向过程 面向对象 三、构造函数 四、原型对象 constructor 属性 对象原型 原型继承 原型链 一、前言 通过本篇博客&#xff0c;我们将了解面向对象编程的一般特征&#xff0c;掌握基于构造函数原型对象的逻辑封装&#xff0c;掌握基于原…...

鸿蒙UI开发——自定义UI绘制帧率

1、概 述 随着设备屏幕的不断演进&#xff0c;当前主流设备采用LTPO屏幕&#xff08;可变刷新率屏幕&#xff09;&#xff0c;此类屏幕支持在多个档位之间切换屏幕帧率。 对于快速变化的内容&#xff0c;如射击游戏&#xff0c;交互动画等&#xff0c;显示帧率越高&#xff0…...

鸿蒙基本组件结构

组件结构 1. 认识基本的组件结构 ArkTS通过装饰器Component 和Entry 装饰 struct 关键字声明的数据结构&#xff0c;构成一个自定义组件 自定义组件中提供了一个build函数&#xff0c;开发者需要在函数内以链式调用的方式进行基本的UI描述&#xff0c;UI描述的方法请参考UI描述…...

柔性鞋材振动刀智能视觉裁切机市场报告:未来几年年复合增长率CAGR为5.4%

震动刀切割设备是一种利用振动刀片在各种非金属材料表面上切割的设备&#xff0c;振动刀切割机利用刀片高频振动和360度旋转&#xff0c;能保证每分钟上万次的振动频率&#xff0c;可在平面进行垂直切割&#xff0c;锋利裁剪。震动刀切割设备切割速度快&#xff0c;可以单层切割…...

突破常规认知的编辑器革命:TinyEditor轻量级代码编辑器深度解析

突破常规认知的编辑器革命&#xff1a;TinyEditor轻量级代码编辑器深度解析 【免费下载链接】TinyEditor A functional HTML/CSS/JS editor in less than 400 bytes 项目地址: https://gitcode.com/gh_mirrors/ti/TinyEditor 当开发者在移动设备上调试代码&#xff0c;或…...

如何用智能工具提升暗黑破坏神3战斗效率:D3KeyHelper全功能指南

如何用智能工具提升暗黑破坏神3战斗效率&#xff1a;D3KeyHelper全功能指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 暗黑破坏神3的战斗节奏快…...

从权重计分到算杀引擎:五子棋AI核心算法实战解析

1. 五子棋AI的算法演进&#xff1a;从基础评分到算杀引擎 五子棋作为一款经典策略游戏&#xff0c;其AI算法的核心在于如何评估棋盘局势并做出最优决策。早期AI主要依赖简单的评分机制&#xff0c;比如给不同的棋形&#xff08;活二、活三、冲四等&#xff09;赋予固定分值&…...

告别90%重复劳动:psd2fgui工具实战指南

告别90%重复劳动&#xff1a;psd2fgui工具实战指南 【免费下载链接】psd2fgui A tool for converting psd file to fairygui package. 项目地址: https://gitcode.com/gh_mirrors/ps/psd2fgui 价值定位&#xff1a;UI开发中哪些环节正在吞噬你的效率&#xff1f; 作为游…...

构建专属数字分身:Duix-Avatar本地化部署与应用全指南

构建专属数字分身&#xff1a;Duix-Avatar本地化部署与应用全指南 【免费下载链接】Duix-Avatar 项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar 在数字化时代&#xff0c;拥有一个能够自主生成视频内容的AI助手已成为提升创作效率的关键。Duix-Avatar…...

颈源性耳鸣,别当成耳部疾病治

耳朵里嗡嗡响、耳鸣不止&#xff0c;听力不受影响&#xff0c;去耳鼻喉科检查却查不出问题&#xff0c;吃药、调理也没有效果&#xff0c;这种耳鸣很可能不是耳部本身的问题&#xff0c;而是颈椎病变引发的颈源性耳鸣&#xff0c;也是极易被误诊的颈椎并发症。颈椎两侧分布着椎…...

如何用20万条真实动作数据,终结机器人动作“脑补”

3月30日&#xff0c;某知名媒体报道了一项来自南洋理工大学的前沿技术突破。研究团队利用超过20万条“4D交互数据”结合“运动学锚定”&#xff0c;研发出一种新型的“生成式仿真”技术&#xff0c;有效解决了机器人动作模拟中长期存在的“脑补”难题。据悉&#xff0c;这一技术…...

Java 26原生HTTP/3实战:QUIC 0-RTT握手,弱网下接口延迟砍半

文章目录引言&#xff1a;当你在地铁里刷不出二维码时&#xff0c;TCP在想什么&#xff1f;HTTP/3和QUIC&#xff1a;从"打电话确认"到"直接敲门送货"TCP的"官僚主义"QUIC的"野路子"Java 26的HTTP/3支持&#xff1a;JEP 517落地等了五…...

OpenClaw技能市场探索:GLM-4.7-Flash加持的10个实用插件

OpenClaw技能市场探索&#xff1a;GLM-4.7-Flash加持的10个实用插件 1. 为什么需要关注OpenClaw技能市场&#xff1f; 当我第一次接触OpenClaw时&#xff0c;最让我惊喜的不是它的基础功能&#xff0c;而是它丰富的技能市场生态。作为一个长期使用各类自动化工具的技术爱好者…...

Balena Etcher:三步完成系统镜像烧录,告别复杂命令的困扰

Balena Etcher&#xff1a;三步完成系统镜像烧录&#xff0c;告别复杂命令的困扰 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 你是否曾经因为需要制作系统启动…...