爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      进程管理

      首页 知识中心 服务器 文章详情页

      进程管理

      2023-06-25 07:12:33 阅读次数:431

      cpu,内核,进程

      一、概念

      1、内核对CPU指令的划分

      首先复习以前学到的计算机的体系架构,从下到上,依次分别是:硬件、内核、系统调用、库、库调用、应用程序。其中应用程序有基于库接口开发的,也有基于系统调用接口开发的,还有两种接口都使用的,如下图所示:

      进程管理

      内核把cpu的指令分为环3和环0(环0上的指令用于调用硬件资源),环3的指令任何人都可以使用,而环0的指令只能由内核调用。一个程序的指令不可能只使用环3的指令还需要使用环0的指令,环3的指令可以直接在cpu上运行,而环0上的指令只能由程序请求内核帮忙完成,自己不能直接调用环0的指令。如果在一个程序有很多指令都要用到环0的话那么其效率一定不会高,一个好的程序使用内核空间的指令与用户空间的指令是有一定的比例的,由用户空间的代码转换成内核空间的代码需要向内核请求调用,这个请求调用的过程是需要时间,真正产生生产力的用户空间的代码。

      内核的指令与虚拟化也有很大的关系,我们后面会专门拿出一篇文章来介绍内核对cpu指令的划分与虚拟化的关系。

      2、进程的生命周期

      进程管理

      进程fork自身产生子进程,把要完成的任务交给子进程,进程本身会进入到sleeping状态等待子进程返回结果,那么下面就是子进程的表现时间了,当子进程把父进程交给他的任务执行完毕会向父进程发送一个exit信号,告知父进程自己已经把任务完成并且结果提交给父进程,当子进程把任务的结果提交给父进程之后,就会自杀(其实自己就已经释放了自己的地址空间,因为任务已经完成了),子进程自杀之后有一件事子进程没办法自己完成,就是注销身份证(PID)的过程,因为PID是父进程给他申请的(此时的状态是zonbie)。父进程会被exit信号给唤醒然后继续运行并把子进程给杀死(注销掉子进程的PID),如果父进程在子进程之前死了话,那么了进程就也会变成zombie状态并并移交给init进程处理。

      我们的系统上可以同时运行那么多的进程是由谁进行管理的呢?是由内核进行管理的,进程管理是内核一个必要和重要的功能,此外还有网络管理,TCP/IP协议栈是集成在内核当中的,为什么要集成在内核当中?网络通信是一个很多程序都会用到的功能而且需要与硬件打交道,如果把TCP/IP协议栈放到用户空间的话效率太低。

      3、子进程

      为什么要创建子进程?在讨论进程管理之前我们要明确为什么要创建一个子进程,当一个进程面对一个比较复杂的任务的时候就会在原来进程基础上创建一个新的进程,把这个复杂的程序委托子进程完成,当子进程把委托给给它的的任务完成之后会把结果返回到父进程。

      进程是如何创建的?内核并不负责进程的创建,内核在cpu上运行起来掌管了一切之后,意味着内核空间启动,开始创建第一个进程init(初始化进程),init启动完成之后意味着用户空间创建完成,init负责创建用户空间的进程的管理,当我们创建一个进程的时候是init按照自己的样子进行创建的或者按照父进程创建的。内核就相当于上帝而init进程就相当于上帝派下来管理人间事物的使者,使者大人负责创建进程和回收进程这类的杂事,当然使者大人也不是万能的,它也需要产生一个又一个进程帮助它完成任务,还有对于向内核申请资源的大事使者大人也不敢压下,还是会向内核报告,因为对于分配资源这种事,也只有内核才能完成,其他任何人都没有这个能力,在linux当中,内核就是上帝。

      4、写时复制、保存现场

      父进程创建子进程时请init程序批准,并向内核申请资源(cpu和内存的使用),子进程创建之初是与父进程共用一个用户空间的,当子进程自己独立之后要使用新的内存空间和数据进或者需要去修改自己的数据的时候父进程不允许的,因为一旦修改了你进程就没办法用了,然后把父进程的数据复制一份到子进程的用户空间单独单独修改,这也就是写时复制。

      内核是如何对进程进行资源分配的呢?进程的销毁?

      对cpu的分配 ,进程有那么多个,但是cpu只有一个,怎样进行分配呢?通过对cpu进行切片分时,一个进程使用一小会儿,比如说是5毫秒,五毫秒到了之后 不管这个进程有没有完成都要退下让下一个进程上去运行。但是如果有进程占着cpu不愿意下去呢?不可能会发生的情况,内核掌握一切,运行五毫秒之后不管怎样都会一脚把这个进程踢下去的。把当前的进程踢下去之后下次再运行的时候肯定要是沿着上一次的没有运行完成的地方继续运行,但是在什么地方保存着进程当前的状态呢?进程的运行状态保存在cpu的寄存器当中,当进程从cpu上退下之后其实是把进程的状态保存到内核的任务结构体当中,当又轮到该进程使用cpu的时候可以快速读取内存当中此进程的状态,然后沿着上一次执行的痕迹继续向下运行。保存状态的过程的称做保存现场,恢复状态的过程称做恢复现场,在内核当中保存的进程状态信息的容器叫做“任务结构体(内核用来存储进程状态的固定格式)”在用户空间是可以通过命令查看到些任务结构体的。如果好多个任务结构体放在一块就组成了一个链表。进程是白发人送黑发人的,父进程需要完成一个复杂任务时才创建子进程,完成任务之后返回结果,子进程完成之后由父进程进行销毁, 子进程在执行任务的时候父进程处在等待状态,父子关系保存到任务结构体当中,其优先级也保存到任务结构体当中,如果父进程没有来得及销毁子进程父进程就挂了的话也没有问题,因为有“上帝的使者”的存在,上帝的使者可以销毁这个进程。

      进程是有优先级的.这个世界没有绝对的公平,在计算机的世界也是一样的,也是有优先级的。举个例子:比如一个ping请求到达主机,cpu就必须立刻做出回应,如果这个ping请求没有任务特权的话(不能立刻得到回应),当cpu有空闲时间来处理这个ping请求时,可以这个ping请求早就请求超时了,所以ping请求的优先级是比较小的,比较小就意味着优先级越高,能够被cpu优先执行。再比如:主机忽然断电了,还好我们的主机还有备用电源,当然也会有相应的进程,当这个进程查看到有断电情况会立刻做出决断,这种进程的优先级也是比较高的。

      内核把进程的优先级划分了固定的个数0-139,共140个优先级,1-99是实时优先级,数据越大优先级越高,这一部分优先级是由内核直接管理的,root也不能插手。 100-139静态优先级(这一优先级范围内的进程root都是可以调整的):数字越小,优先级越高。相同优先级排成一列,这样的话无论是有多少个进程内核只要扫描一上这个链表都知道他们的优先级了。

      nice是范围是-20到19,分别对应100-139,还是nice值越小优先级越高,调整nice值就相当于调整优先级,一个进程的默认优先级是0. 如果一个进程的NI从0调整到-5的话,就相当把进程的优先级就从120转换成了115,0对应120,120-5=115。普通用户只能让自己的进程的优先级值变大,变大意味着优先级降低,只有root可以随意的更改,当然也只能在100外调整。

      当内核需要调用一个新的进程到cpu的时候就从此链表当中选择,当在cpu上运行完之后 会放到另一个链表当中,另一个链表的构造同这一个是一样的,当这一个链表上所有的进程都运行完了之后就向另一个链表当中选择进程去cpu运行。

      对内存的分配,进程有那么多,内存也只有一个,怎样进行分配呢?我们知道用户空间的进程是不能直接与硬件打交道的,都要经过内核,内核会把内存给分成片,一片占据4K,这一片其实就是一个页框。内核把页框进行虚拟,虚拟成线性地址空间,当程序进行开发的时候,程序员假设内存有4G或者8G开发程序,其实一个程序是不能一下子把内存条都占用了,进程占用的其实是线性地址空间,这个线性地址空间是内核用来欺骗程序的,这个程序能使用多少真正的内存空间就分配给它多少空间,但是在进程看来它占用的是整个内存条,进程的存在于内核给它编织的虚拟世界当中。当真正的内存没有页框可以使用了,内核会扫描一下整个内存当中的页框,通过一个算法计算出使用最少的的页框放到swap分区,那么如果是这样做了,当真正使用这个页框的时候内核是怎样操作的呢?我们前面提过内核当中有一个进程任务结构体,这个结构体不仅保存了进程的状态还保存了进程使用了哪些线性地址空间还有对应的物理地址空间,当这个程序调用到cpu进行运行的时候,内核会通过读取这个任务结构体里面此进程对应的地址空间把页框从swap分区中重新加载到内存当中,在此过程当中会有一个异常就是缺页异常,因为内存当中的页框被调用到了swap当中了,不能马上找到这个页框,需要去硬件当中调用。

      进程有没有可能摆脱内核的控制?进程是没有办法摆脱内核的控制,除非内核有漏洞,当进程由用户空间转向内核空间的时候会发生一次软中断 ,这一次中断其实就是让内核醒来的操作。

      5、IO过程

      IO分两上步骤,硬件--->内核---->进程

      当我们在shell当中cat一个文件时候,cat 进程会请求内核帮它从硬盘当中读取出文件,因为只有内核可以与硬件打交道,当内核从硬盘当中读取了这个文件的内容之后 再把这个内容放到cat进程当中。也就是说,进程发起调用等两段时间,第二段才是真正的IO过程。

      [root@zabbix ~]# time cp -rf /etc/ /tmp/etc.bak
      real	0m6.493s
      user	0m0.005s
      sys	0m1.130s
      [root@zabbix ~]# time cp -rf /etc/ /tmp/etc.bak
      
      real	0m0.900s
      user	0m0.003s
      sys	0m0.895s
      

      通过上图我们可以看出IO的一些情况,当第一次我们备份/etc/目录时,所花费的时间很长,因为这一次全新的IO,cp命令向内核申请,内核把数据从内核当中调用出来到内核空间,然后再分配给进程,这是两段过程。当第二次的时候因为数据已经在内存当中还没有清除,此时的IO就成了一段而不是两段,所以速度快了很多。

      6、进程的类型、状态

      类型

      从进程的表现形式来看,进程可分为前台进程和守护进程:

      • 守护进程,在系统引导过程启动的进程,跟终端无关的进程

      • 前台进程,跟终端相关,通过终端启动的进程

      也可以把在前台启动的进程送往后台,以守护模式运行。

      从对资源的占用量来看,进程可分为cpu-bound和io-bound:

      cpu-bound(cpu密集型):占用cpu比较多的,比如蓝光高清电影,对内存的占用并不是很大,但cpu解码却很频繁,内核一直关注cpu,如果一个进程频繁的使用的cpu,内核就会对这个进程进行惩罚,把把它的优先级降低。如果主机上进程不多,虽然把它的优先级降低了,但是它依然频繁在cpu运行,但是如果有多个进程,它就要让别的进程先运行。

      io-bound(IO密集型):比如文本编辑器,对cpu占用并不多,但是却要频繁io,文本编辑器的进程优先级要高于看电影(人家把cpu的占用资源让出来了,给人家补偿就是把优先级调高,同时这正是我们需要的,我们输入一个字就想立马看到效果)

      状态

      运行态:running
      就绪态:ready
      睡眠态:sleep
      ​可中断:interruptable
      ​不可中断:uninterruptable
      停止态:stopped 暂停于内存中,但不会被调度,除非手动启动
      僵死态:zombie

      下面就把上述的进程状态解释一下

      正在cpu上运行的状态:运行态,运行状态分为running和runnable,在链表当中等待被加载到cpu的状态:就绪态其实就是runnable.

      睡眠态-可中断的:自己的时间片用完了,不得不睡去,睡去之后,随时可叫醒,随时调度到cpu上随时可运行,不需要额外的数据准备。

      不可中断的,比如cat文件的时候还有等到内核把文件内容给取来的时候就是不可中断的,因为这时算把cat进程放到cpu也没有用,因为没有数据。

      停止态:比如我们使用vim时,将其送往后台,vim状态就会停止在stoped状态。

      僵死态:僵死态在上文提到过,简而言之就是子进程还没被父进程回收时,父进程突然挂了,这时“茫然无助”的子进程的状态被称做为僵死态。

      二、命令&操作

      pstree

      pstree显示进程的父子关系

      • -u显示每个进程所属的账户名称

      • -p显示进程的pid

      [root@zabbix ~]# pstree
      systemd─┬─ModemManager───2*[{ModemManager}]
              ├─rsyslogd───2*[{rsyslogd}]
              ├─smartd
              ├─sshd───sshd───bash─┬─pstree
                            └─vim
      

      从上述显示来看,我们可以看到所有进程的的父进程都是systemd,如果在centos6上执行这条命令,systemd就会变以init。

      ps

      [root@zabbix ~]# ls /proc/
      1      18     21    2966  32    4103  4148  60    7355  8262  
      [root@zabbix ~]# cat /proc/1/cmdline   #我们发现1号进程是systemd
      /usr/lib/systemd/systemd--switched-root--system--deserialize22
      

      进程当前状态查看工具使用场景非常的多,显示的是静态信息,抓取是当前进程的快照。

      在/proc目录中有许多以数字结尾的文件,其实这些目录就是当前系统上正在运行程序的状态,被系统以目录的方式抓取了出来,以进程的pid号命名,我们可以进入这些目录里面的cmdline查看是由哪个命令发起的此进程。

      其实linux当中所有的进程的查看工具都是查看的这个文件当中的信息,为什么需要工具查看进程的状态,直接查看文件不行吗?当然可以,就是文件当中的信息不容易看懂,所以需要我们使用各种进程查看工具来把不容易看懂的信息抽象成人们容易看懂的信息。

      ps -l

      [root@zabbix ~]# ps -l   #仅列出与当前shell相关的进程
      F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      4 S     0  18978  18976  0  80   0 - 29195 do_wai pts/0    00:00:00 bash
      4 T     0  19222  18978  0  80   0 - 37915 do_sig pts/0    00:00:00 vim
      0 R     0  19463  18978  0  80   0 - 38309 -      pts/0    00:00:00 ps
      

      通过上述显示,我们可以看出来当前shell正在运行两个进程:vim和ps

      F:如果是4代表是进程的权限是root,0就代表是普通用户 。

      S:当前进程的状态,S代表s睡眠状态,R代表运行态,T停止状态

      C:代表cpu的使用率。

      PRI和NI是prioritytt和nice的缩写,数值越小代表越优先执行

      ADDR和SZ、WCHAN都与内存有关,ADDR是进程在内存当中的地址,如果是运行状态的话就是-,SZ代表进程用了多少内存,WCHAN代表当前进程是否正在运行,如果是-代表正在运行.

      TIME代表在cpu上运行了多长时间了

      ps -U

      显示某某用户运行哪些进程

      [root@zabbix ~]# ps -U mysql
         PID TTY          TIME CMD
       11045 ?        00:00:09 mysqld
      

      ps aux

      [root@zabbix ~]# ps aux   #较为全面的显示全部进程
      USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root          1  0.0  0.1 191240  4184 ?        Ss   16:25   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
      root          2  0.0  0.0      0     0 ?        S    16:25   0:00 [kthreadd]
      root          3  0.0  0.0      0     0 ?        S    16:25   0:00 [ksoftirqd/0]
      root          5  0.0  0.0      0     0 ?        S<   16:25   0:00 [kworker/0:0H]
      root          7  0.0  0.0      0     0 ?        S    16:25   0:00 [migration/0]
      root          8  0.0  0.0      0     0 ?        S    16:25   0:00 [rcu_bh]
      root          9  0.0  0.0      0     0 ?        S    16:25   0:01 [rcu_sched]
      root         10  0.0  0.0      0     0 ?        S<   16:25   0:00 [lru-add-drain]
      root         11  0.0  0.0      0     0 ?        S    16:25   0:00 [watchdog/0]
      

      选项a代表把与终端有关的进程显示出来,选项x表示把终端无关的进程显示出来,选项u表示显示与用户相关的进程。

      user进程的属主

      pid进程的id号

      %CPU占据cpu的时间百分比

      %MEE占据内存的空间的百分比

      VSZ:virtual memery size虚拟内存大小,在线性地址空间占用的空间大小

      RSS:resdent size常驻内存集,不能被放到交换分区当中必须位于内存当中的数据占用的内存大小

      TTY:通过哪个终端启动的,?表示与终端无关

      STAT:进程的状态

      R:runing

      S:可中断睡眠

      D:不可中断的睡眠

      T:停止态

      Z:僵死态

      +表示这是一个前台进程

      l(小L),表示这是一个多线程进程

      N:低优先级进程

      <高优先级进程

      s:会话进程的领导进程,如果一个领导进程终端,那么这个进程领导的子进程也会终止

      start表示启动时间

      TIME:运行占据cpu的累积进长

      COMMAND:由哪个命令启动的此进程,加中括号的表示是内核线程不是用户进程。

      ps -elf

      [root@zabbix ~]# ps -elf | head
      F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
      4 S root          1      0  0  80   0 - 47810 ep_pol 16:25 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
      1 S root          2      0  0  80   0 -     0 kthrea 16:25 ?        00:00:00 [kthreadd]
      

      -e:相当于ax把与终端有关和无关的进程都显示出来

      -l:长格式列出(小写L)

      -f:显示完整格式的进程信息

      uid:哪个用户发起的

      PID:进程ID

      PPID:父进程ID,0是指内核启动完init之后把将其禁止的进程

      C:运行在了哪个cpu的编号

      STIME:使用cpu的累积时间

      ps -eFH

      -F比小f显示的信息更加的详细

      -H以层级格式显示进程的相关信息

      [root@zabbix ~]# ps -eFH | head
      UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
      root          2      0  0     0     0   3 16:25 ?        00:00:00 [kthreadd]
      root          3      2  0     0     0   0 16:25 ?        00:00:00   [ksoftirqd/0]
      root          5      2  0     0     0   0 16:25 ?        00:00:00   [kworker/0:0H]
      root          7      2  0     0     0   0 16:25 ?        00:00:00   [migration/0]
      root          8      2  0     0     0   0 16:25 ?        00:00:00   [rcu_bh]
      root          9      2  0     0     0   3 16:25 ?        00:00:01   [rcu_sched]
      root         10      2  0     0     0   0 16:25 ?        00:00:00   [lru-add-drain]
      root         11      2  0     0     0   0 16:25 ?        00:00:00   [watchdog/0]
      root         12      2  0     0     0   1 16:25 ?        00:00:00   [watchdog/1]
      

      ps -exo(自定义显示)

      [root@zabbix ~]# ps -exo pid,psr,command | head
         PID PSR COMMAND
           1   2 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
           2   3 [kthreadd]
           3   0 [ksoftirqd/0]
           5   0 [kworker/0:0H]
           7   0 [migration/0]
           8   0 [rcu_bh]
           9   0 [rcu_sched]
          10   0 [lru-add-drain]
          11   0 [watchdog/0]
      

      常用的自定义选项:

      ni:nice值

      pri:priority优先级

      psr:processor运行在哪个cpu

      rtprio:实时优先级

      pgrep

      找出cron与syslog这两个服务的pid号码

      [root@zabbix ~]# ps aux | egrep '(cron| syslog)'
      root       8755  0.0  0.0 126284  1616 ?        Ss   16:26   0:00 /usr/sbin/crond -n
      root      19678  0.0  0.0 112708   992 pts/0    S+   17:32   0:00 grep -E --color=auto (cron| syslog)
      

      pgrep就相当于ps aux | grep

      其实有更简单的方式,如下:

      [root@zabbix ~]# pgrep cron
      8755
      [root@zabbix ~]# pgrep syslog
      8746
      
      [root@zabbix ~]# pgrep -u root  | head -2   #仅显示root运行的进程号
      1
      2
      [root@zabbix ~]# pgrep -u root -l | head -2  #随便把进程的名字也显示出来
      1 systemd
      2 kthreadd
      
      

      pkill

      用法与pgrep一样,后面直接跟进程的名字即可。

      [root@zabbix ~]# pkill sshd
      

      pidof

      //根据进程名字获取pid号,反之不可
      [root@zabbix ~]# pidof sshd
      19919 19826
      

      top

      //指定几秒刷新一次,默认5秒
      top –d 5
      
      //使用-d此选项可以仅查看某一个进程的状态
      top –p <pid号码>
      

      显示进程的动态信息,ps是显示的是进程的静态信息,直接使用ps命令进程按照占用cpu的资源的多少排序,注意,下图当中的信息实际上是在不断的变化,如下:

      top - 20:05:19 up  1:32,  2 users,  load average: 0.09, 0.04, 0.05
      Tasks: 159 total,   1 running, 158 sleeping,   0 stopped,   0 zombie
      %Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      KiB Mem :  3324936 total,  2368636 free,   365448 used,   590852 buff/cache
      KiB Swap:  3538940 total,  3538940 free,        0 used.  2657500 avail Mem 
      
         PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          
       20058 root      20   0  162012   2300   1592 R   0.7  0.1   0:00.03 top                                              
        8353 root      20   0  320028   6744   5268 S   0.3  0.2   0:12.62 vmtoolsd                                         
        8732 root      20   0  573828  17228   6060 S   0.3  0.5   0:01.74 tuned       
      

      当使用top命令之后默认是使用cpu的占用的多少进行排序(%CPU)使用P表示,如果在这个界面当中按大写的M就会按照占用内存的多少来排序;也可以使用T累积占用cpu时间的多少进行排序(也就是TIME+)。

      第一行02:17:41显示的是当前的系统时间,up 11:05是系统运行了多少时间,5user当前系统登录多少用户,load average平均负载 cpu队列当中等待运行的任务的个数(也可以是排列的长度),并不是百分比,过去的一分钟,五分钟的平均长度(这是队列当中的进程的多少,越小越好,越小代表cpu的负载越低),十五分钟的平均负载状态。如果在top命令当中没想显示此行的内容使用l(小写的L)就可折叠,再次使用l又会显示。这个地方显示的信息使用uptime也可以显示,如下:

      [root@China ~]# uptime
      
       02:29:54 up 11:17, 5 users, load average: 0.04, 0.03, 0.05
      

      第二行,tasks所有的进程的数量,后面就是处于运行状态的有多少个,睡眠状态的有多少个,停止状态的有多少个,僵死状态的有多少个。

      第三行是cpu的负载情况:从下图我们看出当前有两个cpu,按数字1可以把所有cpu的负载信息都展开或者折叠显示,默认是是cpus,这表示是平均的负载情况,如下图:

      top - 20:09:38 up  1:36,  2 users,  load average: 0.00, 0.02, 0.05
      Tasks: 158 total,   2 running, 156 sleeping,   0 stopped,   0 zombie
      %Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      %Cpu1  :  0.0 us,  0.6 sy,  0.0 ni, 99.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      %Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      %Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      KiB Mem :  3324936 total,  2368140 free,   365928 used,   590868 buff/cache
      

      us指用户空间占据的cpu百分比,sy内核空间的占用cpu的百分比,ni是nice占用cpu的空间,id空间比例,wa等待io完成占据的时间,如果这个时间过大的话代表磁盘太慢了已经成为了系统瓶颈了,hi(硬件中断)处理硬中断占据的百分比,si(软中断)是处理软中断占据的百分比,st cpu被偷走的时间的比例,如果系统中有运行虚拟化cpu的时间可能被偷走。

      按t可以把task和cpu的负载信息都折叠或者是展开显示,如下图:

      top - 20:11:08 up  1:38,  2 users,  load average: 0.00, 0.01, 0.05
      KiB Mem :  3324936 total,  2368124 free,   365924 used,   590888 buff/cache
      KiB Swap:  3538940 total,  3538940 free,        0 used.  2656996 avail Mem 
      

      第三行,物理内存的总大小,已经使用的空间,空闲的空间,缓冲区的空间,与free -m的显示结果是差不多的 .如下所示:

      [root@zabbix ~]# free -h
                    total        used        free      shared  buff/cache   available
      Mem:           3.2G        356M        2.3G         11M        577M        2.5G
      Swap:          3.4G          0B        3.4G
      

      最后一行的解释如下:

      PR优先级

      ni值

      VIRT虚拟内存级

      RES常驻内存级

      SHR共享内存大小

      S当前的简要状态

      TIME+占据cpu的时长

      htop

      在htop里面可以使用鼠标,里面的选项与top是类似的,就不解释了。

      进程管理

      三、偏门

      技巧1

      当我们执行一个程序的时候,比如当我们用vim编辑文件时,在命令模式下通过ctrl+z可以将vim送往后台执行,一旦进入后台之后,vim就会变成stoped状态,我们可以通过jobs命令看到其任务号,然后通过fg命令可重新调用到前台来。

      这种操作有什么用呢?当我们在操作vim时如果忘记某个单词,就可以通过这种方式退出来查看,查看完成后再重新切换到vim里面。

      技巧2

      通过killall后面跟进程的名字可强行干掉某一个进程,与killall搭配的是-9这个选项,意思为不考虑后果,强行干掉某个进程。

      这种操作会用在什么地方呢?用来强杀某些进程的很有用,有时候有些服务会卡住,通过systemctl无法停止,就用killall这种方式,好使!

      调整进程的优先级

      //通过top命令我们看到mysql的优先级默认是0,所有进程的优先级默认都是0
      [root@zabbix ~]# top -p `pgrep mysqld`  
      top - 20:41:16 up  2:08,  2 users,  load average: 0.00, 0.01, 0.05
      Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
      %Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      KiB Mem :  3324936 total,  2365040 free,   368300 used,   591596 buff/cache
      KiB Swap:  3538940 total,  3538940 free,        0 used.  2654428 avail Mem 
      
         PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          
       11045 mysql     20   0 1384160 199104   6748 S   0.0  6.0   0:22.17 mysqld               // 按r键,效果如下:
      PID to renice [default pid = 11045] 11045    #输入要调整进程的PID号,回车之后再输入10                                   
      11045 mysql     20   0 1384160 199104   6748 S   0.0  6.0   0:22.52 mysqld  
      //效果如下图,优先级就变成10了
      
         PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          
       11045 mysql     30  10 1384160 199104   6748 S   0.3  6.0   0:22.89 mysqld                                           
      

      上述我们针对的是已经运行起来的进程,下面我们来演示一下,对没有运行起来的进程,我们怎样调整它的优先级。

      //运行top并指定nice为9,当然也可以指定成负的,比如-3
      [root@zabbix ~]# nice -n 9 top   
      //通过这条命令可以验证
      [root@zabbix ~]# ps -axo pid,ni,command | grep top   
        7198   9 top
        7237   0 grep top
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_11580232/3218936,作者:一张贺卡,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:简单的windows共享小项目

      下一篇:LVS(一)

      相关文章

      2025-05-16 09:15:10

      Linux系统基础-进程信号超详细讲解

      Linux系统基础-进程信号超详细讲解

      2025-05-16 09:15:10
      kill , 信号 , 命令 , 进程
      2025-05-14 10:02:58

      Linux top 命令使用教程

      Linux top 是一个在Linux和其他类Unix 系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。

      2025-05-14 10:02:58
      CPU , 信息 , 内存 , 占用 , 备注 , 进程
      2025-05-13 09:51:29

      ogg在启动应用进程时报错OGG-00412

      ogg在启动应用进程时报错OGG-00412

      2025-05-13 09:51:29
      ogg , OGG , 时报 , 进程
      2025-05-13 09:51:17

      无法启动ogg配置好的抓取以及投递进程

      无法启动ogg配置好的抓取以及投递进程

      2025-05-13 09:51:17
      ogg , 启动 , 抓取 , 进程
      2025-05-13 09:49:19

      内置变量_其他相关

      内置变量_其他相关

      2025-05-13 09:49:19
      参数 , 基础知识 , 实践 , 小结 , 脚本 , 进程
      2025-05-09 08:51:09

      【Linux 从基础到进阶】进程管理与性能调优

      在 Linux 系统中,进程是执行中的程序实例。有效的进程管理和性能调优可以提升系统的响应速度和资源利用率。本文将介绍进程管理的基本概念、常用命令,以及性能调优的最佳实践,适用于 CentOS 和 Ubuntu 系统。

      2025-05-09 08:51:09
      CPU , 性能 , 管理 , 调优 , 进程
      2025-05-07 09:08:16

      MFC如何打开和关闭进程、动态获取进程号、关闭自身进程

      进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,每一个进程都是一个实体有属于自己的地址控件,进程也是一个执行的程序

      2025-05-07 09:08:16
      函数 , 句柄 , 返回值 , 进程
      2025-04-22 09:40:08

      【Linux】Java进程CPU 使用率过高问题排查

      【Linux】Java进程CPU 使用率过高问题排查

      2025-04-22 09:40:08
      CPU , 打印 , 进程
      2025-04-22 09:27:28

      Linux进程调度与等待:背后的机制与实现

      Linux进程调度与等待:背后的机制与实现

      2025-04-22 09:27:28
      wait , 状态 , 进程
      2025-04-18 07:11:11

      k8s容器cpu内存告警指标与资源request和limit

      QoS 是一种控制机制,它提供了针对不同用户或者不同数据流采用相应不同的优先级

      2025-04-18 07:11:11
      container , cpu , limits , pod
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5236260

      查看更多

      最新文章

      Linux系统基础-进程信号超详细讲解

      2025-05-16 09:15:10

      无法启动ogg配置好的抓取以及投递进程

      2025-05-13 09:51:17

      k8s容器基础资源指标讲解

      2025-04-16 09:26:39

      操作系统实训复习笔记(2)

      2025-04-01 10:29:01

      【linux系统操作】 - 技术一览

      2025-03-11 09:35:39

      【Linux】Linux内核学习--- 学习中

      2025-02-21 08:56:43

      查看更多

      热门文章

      MySQL数据库CPU飙升紧急处理方法

      2023-02-15 10:02:19

      Oracle安装时的系统内核参数如何设定(标准的设定方法,绝无出错)

      2023-04-21 03:14:39

      cpu和gpu有什么区别?

      2023-05-29 10:49:26

      操作系统权限提升之Linux提权-内核提权

      2023-08-03 06:04:52

      忘记了root密码!

      2023-06-25 07:13:26

      Nginx 基本配置文件

      2023-07-27 06:45:12

      查看更多

      热门标签

      服务器 linux 虚拟机 Linux 数据库 运维 网络 日志 数据恢复 java python 配置 nginx centos mysql
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      MySQL数据库CPU飙升紧急处理方法

      【linux系统操作】 - 技术一览

      一次服务器CPU占用率高的定位分析

      Linux操作系统介绍-01

      忘记了root密码!

      操作系统权限提升之Linux提权-内核提权

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号