Redhat的进程管理

it2024-07-17  42

文章目录

一,进程基本概述1,描述2,进程的组成部分3,进程环境4,进程的产生5,进程的分类 二,进程状态三,进程优先级1,linux进程调度与多任务。2,进程优先级3,相对优先级:4 nice级别与权限5,进程优先级调整:调整nice值 四,进程管理命令1,ps2 pstree3,pgrep4,pidof5,vmstat 五,控制作业1,作业与会话2,作业分类:3,后台作业 六,进程间通信(IPC:inter Process Communication)七,使用信号控制进程八,监控进程活动1,I/O负载2,实时监控-TOP

一,进程基本概述

1,描述

进程是已启动的可执行程序的运行中实例。cpu的工作机制是分时进行的,通过内核来进行调度,通过纳秒来计量工作时间的。

/proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息,每一个进程的PID是唯一的,就算进程退出了,下一个进程也不会使用此PID。

2,进程的组成部分

已分配内存的地址空间安全属性,包括所有权凭据和特权程序代码的一个或多个执行线程进程状态

3,进程环境

本地和全局变量当前调度上下文分配的系统资源,如文件描述符和网络端口

4,进程的产生

/proc//pidfd:(fd-file describe;文件描述符)父进程—子进程:

现有的父进程复制字节的地址空间(fork)来创建一个新的子进程结构 每一个新进程分配有唯一的进程ID(PID),满足跟踪和安全性之需,PID与父进程ID(PPID)是新进程环境的元素。

任何进程可创建子进程,所有的进程都是第一个系统进程的后代,第一个系统进程是systemd

通过fork进程,子进程继承安全性身份,过去的和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec其自己的程序代码。 通常,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求(wait)。在退出时,子进程可能已经关闭或丢弃了其资源和环境,剩余的部分被称作僵停zmbie(僵尸)。父进程在子进程退出时收到信号而被唤醒,清理剩余结构,然后继续执行其自己的程序代码。

5,进程的分类

前台进程:与终端相关的进程,通过终端启动的进程:

也可把前台启动的进程送往后台处理,以守护模式运行,通过&将进程挂起。

守护进程:daemon,与终端无关的进程(如内核),在系统引导过程中启动的进程zombie(僵尸进程)通过重启系统毁灭僵尸进程

二,进程状态

Excuting :运行状态** Ready:就绪态,也可称作睡眠态**

a Uninterruptible sleep //不可终端的睡眠,不可随时唤醒,只有当IO资源加载成功后才能被唤醒。 b ,interruptible //可终端的睡眠,可随时唤醒。

Zombie :僵尸进程,正常的运行结束了,但是不释放暂据的内存。

Stopped://停止状态,暂停于内存中,但不会被调度,除非手动启动之

进程睡眠的原因:

当一个执行中的进程,需要加载额外的IO资源的时候,由于IO设备的速度太慢,所以会转入睡眠状态等待,交出CPU给其他进程,以免浪费剩余执行时间 在多任务处理操作系统中,每个CPU(或CPU核心)在一个时间点上处理一个进程。在进程运行时,它对CPU时间和资源分配的直接要求会有变化。进程分配有一个状态,它随着环境要求而改变。

Linux进程状态 标志内核定义的状态名称和描述RTASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪STASK_INTERRUPTIBLE:进程处于睡眠状态且正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中DTASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应传递的信号。仅在特定的条件下使用,其中进程中断可能会导致意外的设备状态KTASK_KILLABLE:进程处于睡眠状态,与不可中断的D状态相同,但有所修改,允许等待中的任务通过响应信号而被中断(彻底退出)。实用程序通常将可中断的进程显示为D状态TTASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复)TTASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志zEXIT_ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放XEXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到<高优先级进程N低优先级进程+前台进程组中的进程|多线程进程s会话进程首进程

三,进程优先级

1,linux进程调度与多任务。

a,现代计算机系统中既包含每次只能执行一个指令的低端处理器,也包含高性能的超级计算机,这些超级计算机每台配备数百个CPU,可以并行执行数以百计的指令,但是所有这些系统往往具有一个共同点:它们需要运行的进程数量总是超出实际具有的核心数,

b,通过时间分片技术,Linux(和其他操作系统)实际能够运行的进程数(和线程数)可以超出可用的实际处理单元数,操作系统进程之间进行快速切换,从而给用户一种有多个进程在同时运行的印象,

c,执行此切换的linux内核部分称为进程调度程序。

2,进程优先级

进程优先级范围:0-139,数字越小,优先级越高。

0-99:实时优先级,内核调整 100-139:静态优先级,用户可控制

进程优先级高的特点

获得更多的CPU运行实际 更优先获得CPU运行的机会

要修改进程的优先级可以通过调整进程的nice值来实现,nice值越小,优先级越高;

nice值的范围是(-20,19),-20对应100,19对应139(优先级最大-20)

用户空间:3环 保留:1环和2环是由cpu的厂商自行定义的。 内环:shell内核使用的.

3,相对优先级:

由于不是每种进程都与其他进程同样重要,可告知调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略称为SCHED_OTHER(也称为SCHED_NORMAL),但还有一些其他策略可用于不同的目的。

由于并非所有进程都以同样的方式创建,可为采用SCHED_NORMAL策略运行的进程指定相对优先级。此优先级称为进程的nice值。一个进程可以有40种不同级别的nice值。

这些nice级别的范围是从-20到19。默认情况下,进程将继承其父进程的nice级别,通常为0

nice级别越高,表示优先级越低(该进程容易将其CPU使用量让给其他进程)

nice级别越低,表示优先级越高(该进程更加不倾向于让出CPU)

如果不存在资源争用(例如当活动进程数少于可用CPU核心数时),即使nice级别高的进程也将仍使用它们可使用的所有可用CPU资源。但当请求CPU时间的进程数超过可用核心数时,nice级别较高的进程将比nice级别较低的进程收到更少的CPU时间

4 nice级别与权限

为很占CPU资源的进程设置较低的nice级别可能会对同一系统上运行的其他进程的性能造成负面影响, 所以仅允许root用户设置负nice级别以及降低现有进程的nice级别。root可以随意调整,普通用户只能将优先级调低。

普通非特权用户仅允许设置正的nice级别。只能对现有进程提升nice级别,而不能降低nice级别。

5,进程优先级调整:调整nice值

调整已经启动的进程nice值:renice NI PID (如 renice 3 3704)在启动时指定nice值:(-20,19) nice -n NI COMMAND

四,进程管理命令

1,ps

ps(process state)命令用于列出当前的进程。可以显示详细的进程信息,包括以下内容

-用户识别符(UID),它确定进程的特权 -唯一进程识别符(PID)父进程ID(PPID) -CPU和已经花费的实时时间 -进程在各种位置上分配的内存数量 -进程的位置STDOUT,称为控制终端 -当前的进程状态

os支持的三种选项格式 aUNIX(POSIX)选项,可以分组但必须以连字符开头;如ps -auxbBSD 选项,可以分组但不可与连字符同用cGNU 长选项,以双连字符开头

ps(process state),显示进程信息。注意事项:

加了[]中括号的,表示内核线程,通常位于顶部 exiting或defunct表示僵尸进程 zombie

常用选项

A//显示所有与终端有关的进程U//显示进程是由哪个用户启动的X//显示所有与终端无关的进程-e//显示所有进程,与-A效果相同-l//以长格式显示-F//显示更详细的完整格式的进程信息-f//显示更详细的完整格式的进程信息-H//以进程层级格式显示进程相关信息-o//根据自己的需要选择要显示的字段

//aux结果解析

VSZ //Virtual memory SiZe,虚拟内存集 RSS //ReSident Size,常驻内存集 STAT //进程状态 TIME //运行时的累积时长

//ps命令结果解析

NI //nice值 PRI //优先级 PSR //进程运行在哪个CPU核心上 RTPTRIO //实时优先级 C //运行的CPU编号 STIME //进程的启动时间 VSZ //Virtual memory SiZe,虚拟内存集 RSS //ReSident Size,常驻内存集 STAT //进程状态 TIME //运行时的累积时长

2 pstree

pstree:用于显示当前系统上的进程树如

3,pgrep

以grep的风格指定只显示那些进程,在当前系统中找符合某些特性的进程,只显示进程号。

4,pidof

pidof 根据进程名称查找其PID号。如

5,vmstat

虚拟内存状态查看命令:语法:vmstat [option] [delay{conunt}]

例如: vmstat 2 //表示每2秒刷新一次 vmstat 2 5 //表示每2秒刷新一次,刷新5次后退出。 //常用的选项: -s //显示内存的统计数据

1,procs: r(running) //表示等待运行的队列长度,也即等待运行的进程的个数 b(block) //表示阻塞队列长度,也即处于不可中断睡眠态的进程个数

2,memory:存储使用记录

swpd//交换内存的使用总量(总空间)free//空闲物理内存总量 (可用的空间)buffer//用于buffer的内存总量(缓冲)cache//用于cache的内存总量(缓存)

3,swap:交换空间,大小一般是真实内存的1到1.5倍。 数值越大表明内存在不停的调用,反映出内存不足的问题。

si(swap in)//表示从物理内存有多少页面换进swap,也即数据进入swap的数据速率(kb/s)so(swap out)//表示从swap有多少页面换进物理内存,也即数据离开swap的数据速率(kb/s) 4,io:写入/输出(in/out) bi(block in)//表示磁盘块有多少个被调入内存中,也即从块设备读入数据到系统的速率(kb/s)bo(block out)//表示有多少个磁盘块从内存中被同步到硬盘上去了,也即保存数据至块设备的速率(kb/s)

5,system:

in( interrupts)//表示中断的个数,也即中断速率(kb/s)cs(context switch)//表示上下文切换的次数,也即进程切换速率(kb/s)

6,CPU:

us//表示用户空间sy//表示内核空间id//表示空闲百分比wa//表示等待IO完成所占据的时间百分比st//表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)

五,控制作业

1,作业与会话

作业控制是shell的一种功能,它允许单个shell实例运行和管理多个命令。

作业与在shell提示符中输入的每个管道相关联。该管道中的所有进程均是作业的一部分,并且是同一个进程组的成员。(如果在shell提示符中仅输入了一条命令,则这条命令可视为命令的最小管道。该命令将是该作业的唯一成员)

一次只能有一个作业从特定终端窗口读取输入和键盘生成的信号。属于该作业的进程是该控制终端的前台进程。

该控制终端的后台进程是与该终端相关联的任何其他作业的成员。终端的后台进程无法从终端读取输入或接收键盘生成的中断,但可以写入终端。后台中的作业可能已停止(暂停),也可能正在运行。如果某个正在运行的后台作业尝试从终端读取内容,则该作业将自动暂停。

每个终端是其自身的会话,并且可以具有一个前台进程和多个独立的后台进程。一个作业只能属于一个会话,也就是属于其控制终端的会话。

2,作业分类:

Linux分为前台作业和后台作业

前台作业:通过终端启动,且启动后一直占据了命令提示符 后台作业:可以通过终端启动,但启动后,释放命令提示符,后续的操作在后台完成========此类作业虽然被送往后台运行,但其依然与终端相关,当终端关闭时改后台也随之停止。

可以通过nohup command & 剥离与终端的关系。当终端停止运行时,作业依旧在后台进行。

3,后台作业

&挂起作业,后台运行,不占用前台bash窗口。

[root@localhost ~]# sleep 1000 & [1] 1819

1,//jobs命令用于显示当前所有的后台作业

[root@localhost ~]# jobs [1]+ Running sleep 1000 & //jobs命令的结果中 + //命令将默认操作的作业 - //命令将第二个默认操作的作业

2,//fg命令用于将”后台作业调至前台运行“

[root@localhost ~]# fg //当只有一个后台作业时,直接使用fg命令,不跟任何参数即可将后台作业调至前台运行,但是当有多个作业时则必须跟上%+作业号,也就是上面命令执行结果中以[]括起来的数字。 [root@localhost ~]# jobs [1]- Running sleep 1000 & [2]+ Running sleep 500 & [root@localhost ~]# fg %1 //使用ctrl+z可将前台进程发送到后台,此时作业将处于停止状态 [root@localhost ~]# fg %1 sleep 1000 ^z [1]+ Stopped sleep 1000

3,//使用bg命令+作业号可使后台”已停止的作业重新运行“

[root@localhost ~]# bg %1 [1]+ sleep 1000 & [root@localhost ~]# jobs [1]- Running sleep 1000 & [2]+ Running sleep 500 &

4,//kill加上作业号可以手动杀死(终止)指定作业。

[root@localhost ~]# jobs [1]- Running sleep 1000 & [2]+ Running sleep 500 & [root@localhost ~]# kill %1 [1]- Terminated sleep 1000

5,//Nuhup:将进程挂在后台运行:跟随系统进程:命令实例:Nuhup sleep 600 &

六,进程间通信(IPC:inter Process Communication)

进程间通信方式:

同一主机:-共享内存;-信号:Signal 不同主机:-rpc:remote procecure call;-基于socket(套接字)实现进程间通信。 套接字socket:IP+port 在终端上可以通过netstat use查看运行的进程IP和端口。


七,使用信号控制进程

信号是传递至进程的软件终端。信号向执行中的程序报告事件,生成信号的事件可以是错误或外部事件(如I/O请求或计时器过期,或者来自于明确请求(如使用信号发送命令),或者来自于明确请求(如使用信号发送命令))

–event事件:下面列出系统管理员用于日常进程管理的基本信号。

通过短名称(HUP)或正确名称(SIGHUP)指代信号。 指定一个信号的方法: -信号号码(数字标识):kill -1 -信号完整名称:kill -SIGKILL(信号) -信号简写名称:kill -TERM或kill -KILL或kill -INT或kill -HUP

基本进程管理信号

信号编号 ID短名称定义用途1HUP挂起让一个进程不用重启就可以重读配置文件,并让新的配置信息生效2INT键盘中断中断一个前台进程。ctrl+c就是用的SIGINT信号9KILL中断,无法拦截导致立即终止程序。无法被拦截、忽略或处理15 默认值TERM终止导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的友好方式,允许自我清理

用户可以中断自己的进程,但只有root才能终止由其他人拥有的进程。

kill命令根据ID向进程发送信号。虽其名称为kill,但该命令可用于发送任何信号,而不仅仅是终止程序的信号 //语法: kill [-SIGNAL] PID … //显示所有可用的信号(可使用man 7 signal查看帮助信息) //killall COMMAND:killall后面跟进程名,表示将匹配到的以进程名为名的进程全部杀死 也可以使用kill 加进程ID

八,监控进程活动

1,I/O负载

负载平均值代表一段时间内感知的系统负载,Linux通过预期服务等待时间来表示实施平均负载计算

a,Linux不仅计算进程数,也作为独立的任务计算线程数。运行中线程和等待I/O资源的线程的CPU请求队列对应于R和D进程状态。等待I/O包括处于睡眠而等待预期磁盘和网络响应的任务。

b,负载数属于全局计数器计算,是所有CPU的总和数。由于从睡眠返回的任务可能会重新调度到不同的CPU,难以精确的每CPU计数,但累计数的准确度可以保障。显示的平均负载代表所有的CPU。

signal队列长度 //查看cpu核心数 [root@Eryuege ~]# grep ‘model name’ /proc/cpuinfo model name : Intel® Xeon® CPU E5-2650 v3 @ 2.30GHz [root@Eryuege ~]# grep ‘processor’ /proc/cpuinfo processor : 0

一些UNIX系统仅考虑CPU使用率或运行队列长度来指示系统负载。由于具有空闲CPU的系统可能会因为磁盘或网络资源忙而遇到很长时间的等待,因此Linux负载平均值中包含了对I/O的考量。遇到负载平均值很高但CPU活动很低时,请检查磁盘和网络活动。(CPU使用率很低,但是负载平均值高,可能是磁盘或网络的读写过慢)

Linux中可以使用top、uptime显示负载平均值的情况。 [root@Eryuege ~]# uptime 09:14:12 up 4 days, 22:36, 4 users, load average: 0.00, 0.00, 0.09 //此处的load average就表示负载平均值,这三个值代表最近1、5和15分钟的负载情况。

a,将显示的负载平均值除以系统中的逻辑CPU数。当值低于1表示资源利用率较好,等待时间很短。当值高于1表示资源饱和,而且有一定的服务等待时间。

b,空闲CPU队列的负载数为0。每个就绪和等待的线程使计数增加1。总队列数为1时,资源(CPU、磁盘或网络)正在使用中,但没有请求把时间花在等待上。增加的请求数会累积该计数,但由于许多请求可以在时限内处理,资源使用率会很高,而等待时间则不会。

c,因为磁盘或网络资源忙碌等待I/O而处于睡眠的进程包含在该计数内,而且使负载平均值增大。 虽然不能表示CPU使用率,队列数依然表明用户和程序正在等待资源服务。

d,在资源饱和前,平均负载将保持在1以下,因为几乎不会在队列中发现等待的任务。只有资源饱和导致请求留在排队状态并且被负载计算例程计数时,负载平均才会增大。当资源使用率接近100%时,每个增加的请求将开始遭遇服务等待时间。

2,实时监控-TOP

top用于实现全屏动态显示系统信息(默认按照CPU的使用率排序)

//常用选项 -d //设置延迟时长,top -d 1 表示每一秒刷新一次,默认每隔5秒刷新 -b //批模式翻屏显示,默认只实时显示一屏,若要显示后面的进程信息则可使用-b选项,与-n #号合用

load average:1分钟,5分钟,15分钟 load average //CPU队列中等待运行的任务的个数

cpu(s):多颗CPU平均负载,按1键显示每颗CPU平均负载。

sy//表示内核空间;us//表示用户空间;Ni//表示调整nice值,CPU占用的比率;id//表示空闲百分比;wa//表示等待IO完成所占据的时间百分比;hi//表示hard interrupt,硬件中断占据的时间百分比;si//表示软中断占据的时间百分比;st//表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)

PR // 优先级

NI // nice值

VIRT // 虚拟内存集

RES // 常驻内存集

SHR // 共享内存大小

S // 进程状态

进入top实时监控后的交互命令 //top命令交互式子命令:

M//根据驻留内存大小进行排序,默认根据CPU百分比排序P//根据CPU使用百分比进行排序T//根据累计时间(占据CPU时长)进行排序l//是否显示平均负载和启动时间t//是否显示进程和CPU状态相关信息m//是否显示内存相关信息c//是否显示完整的命令行信息q//退出top命令k//终止某个进程1//显示所有CPU的信息s//修改刷新时间间隔
最新回复(0)