第五篇:Linux进程的相关知识总结(1)

目录

第四章:进程

4.1进程管理

4.1.1进程管理需要的学习目标

4.1.1.1了解进程的相关信息

4.1.1.2僵尸进程的概念和处理方法:

4.1.1.3PID、PPID的概念以及特性:

4.1.1.4进程状态

4.1.2进程管理PS

4.1.2.1静态查看进程

4.1.2.1.1自定义查看进程的列信息

4.1.2.1.2进程排序(默认为升序排序)

4.1.2.1.3进程的父子关系

4.1.2.2动态查看进程

4.1.2.2.1top的选项


第四章:进程

4.1进程管理

4.1.1进程管理需要的学习目标

4.1.1.1了解进程的相关信息

        进程的概念:进程:进程是已启动的可执行程序的运行,实例echo、read带有这种单词的就是一个程序,进程存储在内存中,内存速度很快。

        进程的组成:进程标识符(PID):每个进程都有一个唯一的数字标识符,用于区分系统中的不同进程。

  1. 程序计数器(Program Counter, PC):指示了进程将要执行的下一条指令的地址。
  2. 寄存器集合:包括但不限于:
  1. 内存映像:进程的内存空间,包括:
  1. 文件描述符表:包含进程打开的所有文件和设备的引用。
  2. 环境变量:定义了进程执行时所需的环境信息。
  3. 当前工作目录:进程的当前目录,用于解析相对路径。
  4. 信号处理:定义了进程如何响应各种信号。
  5. 进程状态:如运行中(Running)、等待(Waiting)、停止(Stopped)或僵尸(Zombie)状态。
  6. 进程优先级:影响进程获得CPU时间片的频率。

程序与进程的区别:

        程序:通常是通过某种语言编写的文本文件,一旦我们把程序执行起来了就是进程,Linux中./+文件名就是运行的意思,程序存储在外存中,但是外存很慢

        程序编程进程之后的变化:简单来说程序就是还没被运行的计算机指令的集合,进程是计算机中当前正在前端或者后端运行的程序。程序变成进程之后会拥有一些东西

程序变成进程之后会拥有:

1.内存资源,程序在硬盘中,进程在内存中

2.CPU资源,CPU的1s 被分成了1000份(分片),有一个或者多个片来处理进程,占有CPU的0.2%的时间来处理。

3.网络资源,程序运行的时候可能会占用网络资源

4.名字PID(process Identify)

5.权限、自我复制等等。。。。。。

        图解如下(最左侧alice为未被执行的初始程序):

进程的生命周期:

        系统引导:计算机启动时,BIOS或UEFI固件首先执行,它会找到启动设备(如硬盘),并加载引导加载程序(Bootloader)。

  1. 加载操作系统:引导加载程序加载操作系统内核到内存中,并将其执行。操作系统内核是操作系统的核心部分,负责管理系统资源和控制硬件。
  2. 初始化进程创建:操作系统内核初始化后,会创建第一个用户空间的进程,通常这个进程的进程ID(PID)是1。在Linux系统中,这个进程是init,在Windows系统中,是smss.exe(Session Manager Subsystem)。由init生成的进程我们也叫它孩子进程,当CPU执行孩子进程的时候父进程是休眠的,因为CPU没有更多的算力投入到Process父进程的计算中了。
  3. 读取启动配置:第一个进程会根据操作系统的配置文件(如/etc/inittab在某些Linux发行版中,或注册表中的启动项在Windows中)来确定需要启动哪些服务和应用程序。
  4. 创建子进程
  1. 进程间通信:新创建的进程可能会需要与其他进程通信,操作系统提供了多种进程间通信(IPC)机制,如管道、消息队列、共享内存、套接字等。
  2. 用户登录:在多用户系统中,第一个进程或其子进程之一会负责启动登录管理器,允许用户登录系统。
  3. 桌面环境和会话管理:在用户登录后,会话管理器或类似的进程会启动桌面环境和用户的个人应用程序。
  4. 持续管理:第一个进程或其子进程可能还负责持续监控和管理系统的运行状态,包括处理系统日志、资源监控等。
  5. 正常结束的进程会重新返回到父级进程Process中,非正常结束的进程会变成Zombie僵尸进程。

4.1.1.2僵尸进程的概念和处理方法:

        僵尸进程(Zombie Process)是一个已经完成执行但尚未被其父进程回收其进程描述符(即调用wait()或waitpid()系统调用)的进程。在Linux和其他类Unix操作系统中,僵尸进程占用系统资源,特别是进程表项,但不会消耗CPU时间。僵尸进程的进程描述符在进程终止后仍然保留在系统中,直到父进程调用了wait()或waitpid()来显式地回收它。

僵尸进程通常出现在以下情况:

  • 子进程已经完成其执行并退出。
  • 父进程没有调用wait()或waitpid()来读取子进程的退出状态。

僵尸进程的特征

  • 它在进程列表中显示为“Z”状态。
  • 它占用进程ID(PID)但不占用其他资源。
  • 如果父进程没有正确处理,僵尸进程会一直存在。

解决方法

  1. 显式回收:
            父进程应该调用wait()或waitpid()来显式地回收子进程的资源。这会读取子进程的退出状态,并释放其进程描述符。
  2. 使用wait()的循环:
            在某些情况下,父进程可能不知道何时子进程会退出。在这种情况下,可以在父进程中使用一个循环来调用wait(),这样可以回收所有已经终止的子进程。
  3. 设置忽略子进程退出信号:
            在某些编程实践中,可以通过设置子进程的信号处理函数来忽略SIGCHLD信号,然后周期性地调用waitpid(),传递-1作为第一个参数,这样会回收任何状态改变的子进程。
  4. 使用waitpid():
            使用waitpid()可以指定等待特定PID的子进程,或者使用-1来等待任何子进程。
  5. 避免创建僵尸进程:
             

            在程序设计时,确保每个子进程都有一个父进程来管理它。

            使用守护进程(Daemon)来管理子进程,确保它们被适当地回收

  6. 使用ps命令检查:
            使用ps命令加上适当的选项(如-e或-a)来检查系统中的僵尸进程。
  7. 重启系统:
            如果僵尸进程过多,影响系统性能,重启系统可以清除所有进程,包括僵尸进程。
  8. 使用脚本或工具:
            可以编写脚本或使用系统管理工具来监控和清理僵尸进程。

        僵尸进程本身不会对系统造成直接的损害,但过多的僵尸进程可能会耗尽系统资源,导致新进程无法启动。因此,正确管理子进程的生命周期是避免僵尸进程问题的关键。

4.1.1.3PID、PPID的概念以及特性:

        PID:当一个操作系统运行进程时,系统会自动为其分配一个唯一的标识符,这个标识符就是PID。PID是一个非零整数,具有唯一性,用于标识一个进程。PID一旦被分配给一个进程,就会伴随该进程的整个生命周期,直到进程结束。PID的目的是为了便于操作系统管理和标记进程。当进程的生命周期终止时,其PID会被释放,之后的进程可以再次使用这个PID。

PID(进程标识符)的特性

  • 唯一性:PID是一个整数,用于唯一地标识系统中的每个进程。
  • 范围:PID的范围通常从1到32767,但这个范围可以根据系统配置进行调整。
  • 生命周期:PID在进程的整个生命周期内保持不变,直到进程终止。
  • 特殊值:PID 1通常被分配给系统中的第一个用户级进程,即init进程,它是所有其他用户级进程的祖先。

        PPID:在Linux系统中,PPID代表的是父进程的PID,即父进程的进程号。当一个进程被创建时,创建它的那个进程被称为父进程,而子进程通过PPID指出其父进程。PPID也是一个非零整数,与PID一样,用于标识进程之间的关系。通过编程调用getpid函数可以获取自身的进程标识符,而getppid函数则用于获取父进程的进程标识符。

PPID(父进程标识符)

  • 关系:PPID是一个整数,表示创建当前进程的父进程的PID。
  • 继承:当一个新进程被创建时,它会从其父进程那里继承PPID的值。
  • 用途:PPID用于追踪进程的家族树,即进程之间的父子关系。
  • 特殊值:如果一个进程的PPID为0,这通常意味着它是一个守护进程(Daemon),或者是由于某些原因父进程已经终止,而子进程变成了孤儿进程,随后被init进程收养。

处理孤儿进程

  • 当一个父进程终止时,它的子进程如果没有被其他进程收养,就会变成孤儿进程。操作系统通常会将孤儿进程的PPID设置为1,即init进程,这样init进程就会在孤儿进程终止时回收其资源。
4.1.1.4进程状态

        进程的状态共分为四类:R(运行中的进程)、S(睡眠的进程)、T(停止的进程)、Z(僵尸进程)

如果出现R+、S+等命令说明优先级比较高,如果有需要CPU会优先处理它。

4.1.2进程管理PS

4.1.2.1静态查看进程

        在Linux中我们一般使用PS命令来完成对命令的静态查看。

ps aux

        ps aux表示打开进程管理器,也可以使用ps a、ps u、ps x分别进行进程信息的查看,只不过它们略有不同,a选项表示显示所有终端的进程,包括其他用户的进程。u选项表示以用户友好的方式显示进程信息,包括用户、PID、CPU使用率、内存使用率、命令等。x选项表示显示没有控制终端的进程,即那些与终端无关的进程(下图则展示了a、u、x的三种不同的查看方式)。

配合管道(后期会讲)我们可以完成对进程更多的操作

例如:

ps aux | head -1

表示查看进程的表头,输出字段的含义

静态查看进程所显示的信息(如下图所示):

USER:运行进程的用户名。

PID:进程的ID。我们通过PID来杀死进程

%CPU:进程占用的CPU百分比。占了cpu百分之多少的资源,也称CPU占用率

1以下消耗不大,1以上消耗过大

%MEM:进程占用的内存百分比。

VSZ:虚拟内存大小(Virtual Size),进程使用的虚拟内存总量。

硬盘中我们拿出一部分当假内存使用,就叫做虚拟内存

RSS:实际内存大小(Resident Set Size),进程实际占用的物理内存量。

TTY:进程所在的终端类型,比如 pts/0 表示一个伪终端,只有自己一个窗口,本机打开。

pts/1表示文件在1号窗口远程打开,我们也可以通过控制终端名称杀死进程

STAT:进程的状态,例如 R 表示运行,S 表示睡眠。Z表示卡了,僵尸程序需要重启一下

START:进程的启动时间。

TIME:进程占用CPU的总时间。单位为秒,CPU处理文件的时间

COMMAND:启动进程的命令

4.1.2.1.1自定义查看进程的列信息

        如果我们不想一次性查看进程的那么多的信息,假设我们只想查看进程的创建者、进程号、父级进程号、内存占用我们也可以使用PS命令,只不过选项不同

ps axo user,pid,ppid,%mem

        注意事项:我们使用自定义查看进程信息的命令是axo不是aux,其次,属性列之间使用逗号进行分隔

4.1.2.1.2进程排序(默认为升序排序)

        我们学会了使用自定义查看命令之后,假设我们还是想要user,pid,ppid,%mem查看这些自定义进程信息,但是在这些信息中有一个内存占用较高的前四项我要进行删除,我们可以将自定义进程属性列和排序功能进行结合。

ps axo user,pid,ppid,%mem --sort=-%-mem

排序的语法是--sort = 按照什么进行排序(如下图所示)

        如果想要从小到大进行排序则要将“按照什么进行排序"的前面的‘-’删除

ps axo user,pid,ppid,%mem --sort=-%mem

        我们发现计算机中会存在很多进行我们输入一遍命令之后会弹出很多行,但是我们又想进行排序又不想数据那么长,我们只想查看内存占用最高的那前几个,我们可以将自定义进程属性列、排序命令与管道相结合,创造出既可以自定义查看内容又可以进行排序还不会显得数据冗余过长,快速的找出我们想要的数据(如下图,我们找出了内存占比最高的两个进程)

ps axo user,pid,ppid,%mem --sort=-%mem | head -3

        耗费cpu最多的程序是gnome-shell,gnome-shell:Windows的图形程序。PID为2160,kill之后桌面会崩溃,CPU占用率0.7,内存占用率10.7%(具体数值分情况讨论)

利用上述命令我们对就可以查看到内存排序的进程了,删除进程我们后期再讲。

4.1.2.1.3进程的父子关系

        通过上述的基础理论知识学习,我们已经搞明白了何为父进程,何为子进程,而且明白了PID和PPID的概念以及父子进程的相互关系,那么我们在计算机中是如何查看哪些进程的父进程是谁呢?Linux中给我们提供了ps -ef命令。

ps -ef命令是一个常用的命令行工具,用于显示系统中所有进程的详细信息。这个命令的参数组合如下:

  • -e:显示所有进程。
  • -f:以完整格式显示进程列表,包括更多的信息,例如用户、终端、CPU和内存使用率等。

执行ps -ef后,你将获得一个包含许多列的长列表,显示了所有进程的详细信息。

ps -ef弹出的属性列为:

1.UID:用户ID

2.PID:程序ID(1号进程名称为system,操作系统本身的进程就是这个)

3.PPID:父系程序ID,PPID不为零说明有亲爹,PPID定位到PID就是那个进程的爹

4.C:CPU使用率的百分比(CPU usage),表示进程占用的CPU资源比例。

5.STIME:启动时间(start time)

6.TTY:终端

7.TIME:运行时间

8.CMD:程序名称

示例:ps -ef

假设A的PID是2 PPID是0

假设B的PID是0 PPID是2

那么B的爹就是A

PPID->PID

PPID映射PID

4.1.2.2动态查看进程top

        PS静态查看进程的优点是不会过多的占用系统资源,但是如果我们想要实时查看进程信息的话用什么命令来实现呢?我们可以使用top命令完成对进程的实时查看

top

使用top 显示的信息一般有五行12列

五行(如下)

第一行:

top - 18:15:32 up 1 day ,12:18, 5 users, load average:0.00,0.06,0.06

程序名 - 系统时间 运行时间 登录用户数 cpu平局在5、10、15分钟内负载均衡的值

第二行(关于进程的汇总信息):

Tasks:361 total, 1running,360 sleeping, 0 stopped, 0 zombie

任务总数,正在运行的任务数,睡眠数、停止数、僵尸数

第三行(Cpu占用率):

%cpu(s)13.4us,5.7sy,0.0ni,80.8id,0.0wa,0.0hi,0.0si,0.0st

us表示由人执行的程序占用了多少cpu(%)

sy则表示系统

ni表示设置优先级的程序运算占用Cpu多少

id表示空闲Windows中的 Sysytem Idle进程代表了cpu还剩多少进程可用,不是占领了高的cpu占用率

wa表示等待

hi表示硬件

st表示虚拟机

第四行:

KiB MeM:2027936 total,80160 free, 1557772 used, 390004 buff/cache

物理内存总大小 闲置的物理内存大小 已经使用的物理内存 cache缓存的大小

第五行(虚拟内存,交换空间):

KiB Swap:2097148total,1199612 free, 897536 used。182468 avail Mem

虚拟内存总大小 空闲 已经使用的虚拟内存

十二列(如下)有

PID:进程编号

USER:谁启动的该进程

PR:系统优先级

NI:用户自定义优先级

VIRT

RES

SHR

这三个字母表示内存

S:状态

%CPU:CPU占用率

%MEM

TIME+:运行耗时

COMMAND:程序名

4.1.2.2.1top的选项

        我们在输入top命令(如上)实时显示出进程信息的时候,top窗口会实时监听用户键盘的输入,当我们输入固定的指令的时候计算机才会执行相应的步骤

具体的指令如下:

h:获取帮助

M:按内存占比对进程进行排序

P:按CPU的占比进行排序

N:按PID的大小进行排序

< :向前翻页(需要按住SHIFT)

>:向后翻页(需要按住SHIFT) Z:设置字体为彩色

top的其他操作:

1.当我们想要将top的更新时间调整的更加频繁或者更加平缓,我们可以使用

top -d n (n为用户输入的数字,单位为秒)

来定义top命令的刷新时间

top每n秒刷新一次

例如:

top -d 0.2

top动态进程查看每0.2秒刷新一次

2.结束top窗口

我们可以输入ctrl + cESCQ键来退出top窗口

        当然,进程仍涉及到像优先级、进程信号、如何查看内存、如何查看磁盘空间、作业控制Jobs、虚拟文件系统等知识,大家不要急,我们马上就会讲到~

        还是那句话,如果文章中哪些地方有问题或者不明白评论发即可~

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

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

相关文章

基于AI网关的智慧煤矿安全监测应用

煤矿安全一直是矿业管理的重中之重。由于煤矿环境的恶劣与复杂性&#xff0c;例如工作中间环节多、设施设备多样且集中、空间狭小、环境闭塞、有害气体隐患、粉尘聚集等&#xff0c;针对煤矿的安全监测和防范时常面临着极大的挑战。 随着AI技术的发展与普及&#xff0c;依托AI实…

优青博导团队指导-组蛋白甲基化修饰、实验设计、实验结果分析、测序分析及SCI论文辅助,精准高效,为农医学科研保驾护航!

组蛋白甲基化修饰工具(H3K4me3 ChIP-seq) 组蛋白甲基化类型也有很多种&#xff0c;包括赖氨酸甲基化位点H3K4、H3K9、H3K27、H3K36、H3K79和H4K20等。组蛋白H3第4位赖氨酸的甲基化修饰(H3K4)在进化上高度保守&#xff0c;是被研究最多的组蛋白修饰之一。

gnome Files管理文件学习

Files文件夹页可以非常高效的使用&#xff0c;接下来介绍一些有用的快捷命令和tricks 首先是快捷键&#xff1a; **Ctrl T**Ctrl N**Ctrl WClose window or tab**Ctrl FSearch**Ctrl LEnter location**BackspaceGo Back to a Previous FolderCtrl Zoom inCtrl -Zoom outCtrl 0…

MISC - 第四天(OOK编码,audacity音频工具,摩斯电码,D盾,盲文识别,vmdk文件压缩)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天继续讲解MISC知识点 FLAG 附件是一张图片&#xff0c;尝试binwalk无果 使用StegSolve工具Data Extract查看时 发现PK字段&#xff0c;是大多数压缩包的文件头点击Save Bin保存zip文件 解压缩失败使用修复软件:htt…

六西格玛绿带培训机构哪家好?记住这2点很重要

在探讨“六西格玛绿带培训机构哪家好”这一议题时&#xff0c;我们不得不深入剖析当前市场上纷繁复杂的培训机构&#xff0c;以及如何选择一家既能提供高质量教学&#xff0c;又能满足个人职业发展需求的机构。六西格玛作为一套严谨的管理方法论&#xff0c;旨在通过减少变异、…

directx修复工具怎么用?不懂dll缺失怎么修复?本文整理了详细的dll修复方法!

DLL错误&#xff0c;相信很多小伙伴都头疼这个问题。 在电脑上运行程序或者打开某个文件时&#xff0c;是不是会看到“缺少xxx.dll”的错误弹窗&#xff1f;这时候大部分小白用户都是懵的&#xff0c;不知道这是出了什么问题&#xff0c;又该如何解决。 dll文件在电脑领域中扮…

某易易盾验证码逆向

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架,本文网址如下,使用base64解码获得: aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc= ———————————————— 我们来看一下接口请求,这里关注的重点就…

9/24作业

1. 分文件编译 分什么要分文件编译&#xff1f; 防止主文件过大&#xff0c;不好修改&#xff0c;简化编译流程 1) 分那些文件 头文件&#xff1a;所有需要提前导入的库文件&#xff0c;函数声明 功能函数&#xff1a;所有功能函数的定义 主函数&#xff1a;main函数&…

【解决虚拟机NAT联网】收藏这份教程就不用再辛苦找了

网上的教程一大堆&#xff0c;看的云里雾里&#xff0c;对于一个小白来说这里看懂了&#xff0c;下一步又看不懂了&#xff0c;一模一样的去设置也不一定成功。 解决办法01 恢复默认设置&#xff1a; 首先公布一个最基础的最直接最有效的恢复网络的办法&#xff1a; 关闭虚拟…

Serverless and Go

本篇内容是根据2019年8月份Serverless and Go音频录制内容的整理与翻译, Johnny、Mat、Jaana 和特邀嘉宾 Stevenson Jean-Pierre 讨论了 Go 世界中的Serverless。什么是Serverless&#xff0c;Serverless适用于哪些用例&#xff0c;有哪些权衡&#xff0c;以及如何在Serverles…

keepalived+lvs集群

目录 一、环境 二、配置 1、master 1.在master上安装配置Keepalived 2.在master上修改配置文件 2、backup 1.在backup&#xff08;192.168.229.12&#xff09;上安装keepalived 2.在backup上修改配置文件 3、master和backup上启动服务 4、web服务器配置 1.web1和web…

一键搞定!这4款在线音频剪辑神器,你值得拥有!

嘿&#xff0c;小伙伴们&#xff0c;是不是有时候感觉手中的音乐或者语音素材需要经过一番精雕细琢才能完美呈现呢&#xff1f;今天&#xff0c;我就来给大家分享几款超好用的在线音频剪辑工具&#xff0c;让你在轻松愉快的氛围中&#xff0c;享受剪辑的乐趣&#xff0c;体验到…

MySQL函数:流程函数

1.IF函数 基本语法&#xff1a;IF(expr1,expr2,expr3) 功能&#xff1a;如果value为true&#xff0c;返回t&#xff0c; 否则返回f 例如&#xff1a;这个里面expr1里面是false&#xff0c;返回的是Error&#xff0c;如果是true&#xff0c;返回OK select if(false, OK, Err…

OAuth 2.0第三方授权登录

认证和授权的概念和区别 认证 (Authentication[ɔːˌθentɪˈkeɪʃn] )&#xff1a; 你是谁。授权 (Authorization[ˌɔːθəraɪˈzeɪʃ(ə)n])&#xff1a; 你有权限干什么。 概念&#xff1a; Authentication&#xff08;认证&#xff09; 是验证您的身份的凭据&…

利用大型语言模型轻松打造浪漫时刻

当情人节年年如约而至&#xff0c;每每都需费尽心思为对方营造一场令人难忘的仪式&#xff0c;却因缺乏创意与思路而倍感困扰。今天&#xff0c;我决定让大型语言模型为我们提供一些灵感和建议&#xff0c;让我们能够轻松实现这一目标。让我们开始行动吧&#xff01;此前&#…

Paper 0 | Visual Instruction Tuning

使用机器生成的指令跟踪数据对大型语言模型 (LLM) 进行指令调整已被证明可以提高新任务的零样本能力&#xff0c;但这个想法在多模态领域的探索较少。我们首次尝试使用纯语言 GPT-4 生成多模态语言图像指令跟踪数据。通过对此类生成的数据进行指令调整&#xff0c;我们引入了 L…

手语手势识别系统源码分享

手语手势识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Python_面向对象属性与方法

Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c;完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。Python中&#xff0c;一切皆对象。我们在前面学习的数据类型、函数等&#xff0c;都是对象。 面向过程和面向对象…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型&#xff0c;是gemma 2的升级版&#xff0c;主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客&#xff1a;https://blog.googl…

frp内网穿透服务器+客户端详细配置

当我们拥有一台云服务器时&#xff0c;可以将局域网服务器的服务通过内网穿透发布到公网上。frp是一个主流的内网穿透软件&#xff0c;本文讲解frp内网穿透服务器客户端详细配置。 一、需要准备的内容&#xff1a; 腾讯云服务器&#xff1a;https://curl.qcloud.com/Sjy0zKjy 2…