Linux进程概念

目录

一.冯诺依曼体系

为什么程序运行会加载到内存

二.进程概念

1.进程控制块PCB

2.进程标识符

使用ps命令

使用pgrep命令

使用系统调用

3.进程状态

孤儿进程

守护进程(精灵进程)

4.进程优先级

三.环境变量


一.冯诺依曼体系

        数据在设备之间的传输实质是数据的来回拷贝,拷贝的速度是决定计算机的速度的重要指标

  • 距离cpu越近的储存单元效率越快,单体容量越小,造价越贵
  • 距离cpu越远的储存单元效率越慢,单体容量越大,造价越便宜

        如果输入设备直接和cpu交互,再由cpu到输出设备,就会导致cpu很多时候都在等待数据拷贝进来,处于闲置状态

        冯诺依曼体系引入内存,让输入设备的数据加载到内存,由内存到cpu,cpu将数据处理后拷贝回内存,由内存到输出设备,同时内存还能够进行预加载,缓存等增加效率

为什么程序运行会加载到内存

        由冯诺依曼体系解释,我们的二进制可执行程序在被执行时是需要cpu去执行里面的指令的,要把该程序从输入设备(磁盘)加载到内存,然后交给cpu处理,再返回到内存,然后根据指令比如这个程序就是向显示器打印,那么输出设备就是显示器

二.进程概念

        我们的二进制程序可执行程序被执行时会被加载到内存,而这个可执行程序和操作系统为了管理这个程序的内核数据结构叫做进程,在内核角度上,进程是承担系统分配资源的基本单位

1.进程控制块PCB

        PCB是操作系统内核管理进程的一个数据结构,里面包括了进程的各个属性,比如

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

在Linux下,进程的PCB是task_struct,各个进程互相独立,由内核数据结构统一做管理

进程特性:

  • 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高 效完成任务,更合理竞争相关资源,便具有了优先级
  • 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
  • 并行: 多个进程在多个CPU下分别,同时进行运行,称之为并行
  • 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

2.进程标识符

在Linux中,进程描述符为PID,通过一下几种方法可以获取进程的PID

  • 使用ps命令

        比如查看bash进程的pid

        ps -axj 查看所有进程 再使用管道给grep命令过滤出bash

  • 使用pgrep命令

可以通过进程PID从系统查看大部分进程信息,进程信息存在/ptoc

包括了进程的大部分信息,包括进程的工作目录,可执行程序,状态,优先级,打开的文件描述符等

  • 使用系统调用

可在程序中调用获得进程的PID

3.进程状态

我们看到进程信息中有一个状态标识,根据进程的行为决定状态

  • R状态:运行状态,表示进程当前要么正在运行要么在运行队列中
  • S状态:睡眠状态,表示进程当前意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠)
  • D状态:磁盘休眠状态,有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束
  • T状态:停止状态,可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行
  • Z状态:僵尸状态,进程已经退出但进程的PCB等资源并未被父进程回收,(注意:僵尸进程如果一直不被回收就会导致内存泄漏)
  • s状态: 这表明该进程是一个会话的领导进程
  • +状态:表面进程在前台运行

孤儿进程

当父进程先于子进程退出,就称这个子进程为孤儿进程

为了回收这个子进程的资源和退出状态,就会将这个子进程交付给init进程(PID:1),init进程会成为这个进程的父进程,负责对该进程的终止和资源清理。

守护进程(精灵进程)

        进程组:由多个进程组成,进程组PGID是第一个进程的PID,这些进程通常共享一个终端并能够相互发送信号

        会话:是一个或多个进程组的集合,通常由一个登录 shell 创建。它是一种逻辑上的概念,用来管理一组进程的集合,这些进程通常可以共享一些系统资源(如控制终端)

        打开一个终端相当于创建了一个会话,当终端被关闭,会话被关闭,会话中的所有进程都将退出,为了能让进程在终端关闭的时候一直运行,就需要将这些进程单独放在一个会话中,不受当前终端的影响,这样的进程就是守护进程(精灵进程),守护进程通常提供系统级服务,如网络服务(HTTP 服务器、FTP 服务器)、数据库服务、打印服务等。

使用系统调用创建守护进程

nochdir:表示是否更改工作目录,如果更改,那么该进程的工作目录会更新为"/"

noclose:表示是否进行输入输出处理,因为后台进程无法访问标准输入输出,如果选择进行处理,那么标准输入,标准输出,标准错误会被重定向到一个指定地方

使用jobs命令查看后台作业

jobs + [fg|bg] [作业号] 放到[前台|后台]

4.进程优先级

PRI :代表这个进程可被执行的优先级,其值越小越早被执行

NI :代表这个进程的nice值,优先级的修正数据

PRI(new)=PRI(old)+nice

在Linux下,调整进程优先级,就是调整nice值,通过nice值修正进程的优先级,进程的nice值不是进程的优先级

修改进程优先级

进入top后按“r”–>输入进程PID–>输入nice值

三.环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

使用env命令查看当前的所有环境变量

常见的环境变量比如

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell,它的值通常是/bin/bash
  • PWD : 当前目录
  • USER : 当前登录的用户名
  • LOGNAME : 当前用户的登录名

使用echo $[环境变量名] 查看特定的环境变量

使用export用于将环境变量导入到当前 shell 会话中,并使其在子进程中可用

通过命令行参数得到环境变量

        env会以NULL结尾        

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}

使用系统调用获得环境变量

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

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

相关文章

【Qt】项目代码

main.cpp文件 argc&#xff1a;命令行参数个数。*argv[ ]&#xff1a;每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序&#xff0c;一定需要QApplication对象。 widget w; 在创建项目的时候&#xff0c;勾选widg…

mysql源码编译启动debug

对于没有C语言基础的同学来说&#xff0c;想看看源码&#xff0c;在搞定编辑器做debug的时候就被劝退了&#xff0c;发生点啥了&#xff0c;完全看不懂&#xff0c;不知道从哪里入手去做debug&#xff1b;我为了看看 mysql 的 insert buffer 到底存的是索引页还是数据页&#x…

ViT和SwinTransformer详解

ViT是Google brain发表于ICLR21上的工作&#xff0c;开创性将transformer用在vision领域&#xff0c;且图像识别性能超CNN&#xff0c;至今引用3.8w&#xff1b;原文&#xff1a;https://arxiv.org/pdf/2010.11929 SwinTransformer是微软亚洲研究院发表于ICCV21上&#xff0c;…

双回路校园智能电表是什么?什么叫双回路校园智能电表?

在智慧校园的建设浪潮中&#xff0c;双回路校园智能电表作为一种创新的能源计量与管理解决方案&#xff0c;正逐渐成为校园电力系统改造与升级的关键要素。本文旨在深入探讨双回路校园智能电表的概念、工作原理、核心优势及其在校园能源管理中的应用实践。 一、定义与工作原理…

Harbor 仓库一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

一文理清生产管理的“4管”和“8理”!

一提到生产管理&#xff0c;很多人的第一反应可能是车间里忙碌的身影、流水线上飞速运转的机器&#xff0c;还有一张张密密麻麻的生产计划表。但实际上&#xff0c;生产管理远不止于此。 “科学管理之父”弗雷德里克温斯洛泰勒认为&#xff1a;管理就是确切地知道你要别人干什…

CompletableFuture详解

CompletableFuture详解 学习链接:https://juejin.cn/post/7124124854747398175?searchId20240806151438B643DF2AAD2FC5E6F11E 一、CompletableFuture简介 在JAVA8开始引入了全新的CompletableFuture类&#xff0c;它是Future接口的一个实现类。也就是在Future接口的基础上&a…

计算机网络复习总结

第一章 计算机网络体系结构 1、计算机网络的概念组成和功能 &#xff08;1&#xff09;什么是计算机网络&#xff1f; 计算机网络是将一个分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。…

UI自动化常见精华面试题整理

selenium的运行原理 1、基于Web端如何做自动化测试&#xff0c;谈谈你的思路和方向&#xff1f; Web端的自动化测试&#xff0c;基本就是模拟手工测试人员来做功能测试。用机器的自动执行代替人的操作。web端呈现的产品有两个方向可以做自动化测试&#xff1a;接口层和界面操作…

虚拟机Windows10系统安装QEMU

文章目录 1. QEMU安装1.1 安装准备1.1.1 安装平台1.1.2 软件下载 1.2 安装QEMU1.2.1 找到下载的QEMU软件&#xff0c;双击开始安装1.2.2 设置语言1.2.3 安装向导&#xff0c;点击 Next1.2.4 点击“I Agree”1.2.5 点击Next1.2.6 设置软件安装位置1.2.7 点击 finish1.2.8 编辑系…

odoo from样式更新

.xodoo_form {.o_form_sheet {padding-bottom: 0 !important;border-style: solid !important;border-color: white;}.o_inner_group {/* 线框的样式 *//*--line-box-border: 1px solid #666;*//*box-shadow: 0 1px 0 #e6e6e6;*/margin: 0;}.grid {display: grid;gap: 0;}.row …

FFmpeg源码:av_reduce函数分析

AVRational结构体和其相关的函数分析&#xff1a; FFmpeg有理数相关的源码&#xff1a;AVRational结构体和其相关的函数分析 FFmpeg源码&#xff1a;av_reduce函数分析 一、av_reduce函数的声明 av_reduce函数声明在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为7.0…

【计算机操作系统】同步与互斥的基本概念

同步与互斥的基本概念 进程同步的概念 知识点回顾&#xff1a;进程具有异步性&#xff0c;异步性是指&#xff0c;各并发执行的进程以各自独立的、不可预知的速度向前推进 并发性带来了异步性&#xff0c;有时需要通过进程同步解决这种异步问题&#xff0c;有的进程之间需要…

JVM的面试考点

JVM内存划分 1.堆,整个内存区域中,内存最大的区域,放的都是new出来的对象,new类名这一部分存放在堆中, 而这个scanner是一个临时变量,这个scanner的地址存放在栈上,scanner里面存放的值是new类名这个对象的首地址 2.栈,分为JVM虚拟机栈(Java代码),和本地方法栈(C),这个栈包含了…

如何提前预防网络威胁

一、引言 随着信息技术的迅猛进步&#xff0c;网络安全议题愈发凸显&#xff0c;成为社会各界不可忽视的重大挑战。近年来&#xff0c;一系列网络安全事件的爆发&#xff0c;如同惊雷般震撼着个人、企业及国家的安全防线&#xff0c;揭示了信息安全保护的紧迫性与复杂性。每一…

2024年第五届“华数杯”全国大学生数学建模竞赛C题-老外游中国(代码+成品论文+讲解)

目录 &#x1f495;一、问题重述&#x1f495; &#x1f438;问题 1&#x1f438; &#x1f438;问题 2&#x1f438; &#x1f438;问题 3&#x1f438; &#x1f438;问题 4&#x1f438; &#x1f438;问题 5&#x1f438; &#x1f495;二、解题思路&#x1f495; …

图解RocketMQ之如何实现顺序消息

大家好&#xff0c;我是苍何。 顺序消息是业务中常用的功能之一&#xff0c;而 RocketMQ 默认发送的事普通无序的消息&#xff0c;那该如何发送顺序消息呢&#xff1f; 要保证消息的顺序&#xff0c;要从生产端到 broker 消息存储&#xff0c;再到消费消息都要保证链路的顺序…

【C++】二维数组 数组名

二维数组名用途 1、查看所占内存空间 2、查看二维数组首地址 针对第一种用途&#xff0c;还可以计算数组有多少行、多少列、多少元素 针对第二种用途&#xff0c;数组元素、行数、列数都是连续的&#xff0c;且相差地址是有规律的 下面是一个实例 #include<iostream&g…

Spring源码解析(29)之AOP动态代理对象创建过程分析

一、前言 在上一节中我们已经介绍了在createBean过程中去执行AspectJAutoProxyCreator的after方法&#xff0c;然后去获取当前bean适配的advisor&#xff0c;如果还不熟悉的可以去看下之前的博客&#xff0c;接下来我们分析Spring AOP是如何创建代理对象的&#xff0c;在此之前…

【目标检测类】YOLOv5网络模型结构基本原理讲解

1. 基本概念 YOLOv5模型结构主要包括以下组成部分&#xff1a;‌ 输入端&#xff1a;‌YOLOv5的输入端采用了多种技术来增强模型的性能&#xff0c;‌包括Mosaic数据增强、‌自适应锚框计算、‌以及自适应图片缩放。‌这些技术有助于提高模型的泛化能力和适应不同尺寸的输入图…