Linux进程管理详解

时间:2023-06-27 15:51:55

何谓进程?进程,就是正在执行的一个程序或命令,每一个进程都是一个运行实体,有自己的地址空间,并占用一定的系统资源。简而言之,进程就是运行中的程序。在Linux中,诸如ls等命令都是进程,只不过某些命令进程在运行完后立即关闭了。而像apache等常驻内存服务也会产生进程,例如,一个用户访问一个apache下的站点,必定会产生一个进程。Linux中有各种各样的进程,尤其是在服务器中,我们需要实时了解系统中所有进程的状态,因此本篇文章将针对进程的管理进行详细地讲解。

在具体讲解进程管理前,我们先讨论一下进程管理的作用。总的来说,进程管理具有如下三个作用:

  • 判断服务器健康状态:这是进程管理中最主要的作用,通过分析进程的状态(内存、CPU占有率等)判断服务器的负载和安全状态。
  • 查看系统中的所有进程:这是进程管理的基础,通过查看系统中的所有进程状态才能决定对进程作出什么样的管理。
  • 杀死进程:进程管理中的辅助手段,杀死进程只是迫不得已的做法,一般情况下,进程都有正常的退出方法,只有进程不能正常结束时,才使用杀死进程的方法。

  在了解了进程管理的作用后,我们来看进程查看命令的使用。进程查看命令主要有ps、pstree、top三个命令,下面我们逐一讲解。

  1. ps命令

    命令选项:

  • -a :显示一个终端所有的进程
  • -u:显示进程的归属用户和内存占用情况
  • -x:显示没有控制终端的进程
  • -l:长格式显示更详细的信息
  • -e:显示所有进程

    命令组合:总的来说,ps命令具有两种组合格式,一种是ps aux,一种是ps -le。

  • ps aux:查看系统中的所有进程,使用BSD操作系统格式

Linux进程管理详解

注:ps aux和ps -aux命令有区别,在ubuntu中ps -aux不会报错,而在centos中,ps -aux会提示警告信息。使用man ps可以查看文档描述,但是在使用过程中不必纠结于二者的区别。

Linux进程管理详解

  • ps -le:查看系统中的所有进程,使用Linux标准格式

Linux进程管理详解

在实际使用过程中,我们没有必要对ps命令输出的所有进程都认识,应该关注的是每一列输出信息代表的含义是什么。下面以ps aux为例,讲解对应列的含义:

  • USER:产生该进程的用户。
  • PID:进程的ID。
  • %CPU:该进程占用的CPU资源百分比。
  • %MEM:该进程占用物理内存百分比。
  • VSZ:该进程占用虚拟内存的大小,单位KB。
  • RSS:该进程占用的实际物理内存大小,单位KB。
  • TTY:该进程是在哪个中断运行的,其中tty1-tty7代表本地控制终端,tty1-tty6为字符终端,tty7为图形终端。pts/0-255代表虚拟终端。
  • STAT:进程状态。常见状态有:
    • R:运行
    • S(大写):睡眠
    • T:停止状态
    • s(小写):包含子进程
    • +:后台进程
  • START:该进程的启动时间。
  • TIME:该进程占用CPU的运算时间。
  • COMMAND:进程名

    (注:PID等于1的进程 /sbin/init 是系统的启动进程,是系统中所有进程的父进程)

  2.pstree命令产看进程树

    命令选项:

  • -p:显示进程的PID
  • -u:显示进程的所属用户

Linux进程管理详解

直接使用pstree命令,输出的是系统的进程树,其中相同名称的进程使用数字*进程名的形式输出,使用pstree -p命令可以将不同PID的进程展开:

Linux进程管理详解

  3.top命令查看进程状态

    命令选项:

  • -d 秒数:指定top命令每隔几秒更新,默认是3秒。
  • -b:使用批处理模式输出,一般和-n合用。
  • -n 次数:指定top命令执行的次数。

    top命令交互模式下的命令:

  • ?或h:显示交互模式的帮助文档。
  • p:以CPU使用率排序,默认方式。
  • M:以内存使用率排序。   
  • N:以PID排序
  • q:退出top命令交互模式

    一般的,在终端输入top命令即进入了top交互模式:

Linux进程管理详解

    此时可以键入交互模式下的命令对输出进行不同的排序。在top命令下,我们重点关注最上面五行系统信息:

  • 11:31:20 :系统当前时间,默认每3秒更新。
  • up 113days,16:20 :系统已运行113天16个小时20分钟。
  • 3 users:当前登录了3个用户。
  • load average:0.00,0.00,0.00 :系统在之前1分钟,5分钟,15分钟的平均负载,一般认为对于每一个CPU核心,该数值小于1时系统负载较小,大于1时系统负载较大。
  • Tasks:112total :系统中的进程总数。
  • 2 running:正在运行的进程数。
  • 110 sleeping:睡眠进程数。
  • 0 stopped:正在停止的进程。
  • 0 zombie:僵尸进程。
  • Cpu(s):0.3%us :用户模式占用的cpu百分比。
  • 0.3%sy:系统模式占用的cpu百分比。
  • 0.0%sy:改变过优先级的用户进程占用百分比。
  • 99.3%id:空闲cpu的百分比。
  • 0.0%wa:等待输入/输出的进程占用cpu百分比。
  • 0.0%hi:硬中断请求服务占用cpu百分比。
  • 0.0%si:软中断请求服务占用cpu百分比。
  • 0.0%st:虚拟时间百分比。
  • 第四行为物理内存的信息,第五行为交换分区的信息,单位为kb,注意buffers是用作缓冲的内存大小,cached是用作缓存的内存大小。

  4.kill命令终止进程

  • kill -l(字母l):查看所有信号。

      Linux进程管理详解

  其中,重点关注kill -1(数字1)和kill -9。kill -1用于重启进程(而不是杀死),不影响现有进程的使用,一般在修改某种服务的配置文件之后使用该命令;kill -9用于强制终止进程,基本格式为 kill [数字]进程PID。

  • killall命令:基本格式为killall [选项][信号]进程名。killall的选项有-i和-I,-i用于交互,询问是否杀死某个进程,-I用于忽略进程名的大小写。

        Linux进程管理详解

  • pkill命令:基本格式为pkil [选项][信号]进程名 。选项-t 终端号 用于按照终端号踢出用户。

  首先使用w命令查看当前用户,可以见到共有四个远程用户终端,当前正在使用的终端为pts/4,因为其正在使用w命令。接着用pkill命令踢出pts/0,再次用w命令查看,可见此时pts/0用户已被踢出。

        Linux进程管理详解

  5.优先级修改nice命令:基本格式为nice -n 数值 进程名。在前面ps -le命令中,表示优先级的列有PRI(priority)和NI(nice),真正的优先级由PRI决定,数值越小优先级越高。用户只能修改NI的值,修改后的PRI=原PRI+NI。下图为修改apache服务进程的优先级示例。由于优先级对日常使用无很大影响,此处不加赘述,有兴趣的可以自行查阅相关资料。

     Linux进程管理详解