Linux学习之进程管理

发布时间 2023-11-28 17:13:22作者: Lathe

一、进程概述

进程是已启动的可执行程序的运行实例。进程有以下组成部分。

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

每个进程都有唯一的进程标识PID一个PID只能标识一个进程。
PPID为父进程ID。
进程状态是指程序执行过程中的变化。进程状态随着程序的执行和外界条件的变化而转换,一般分为3类:就绪态、运行态、阻塞态。如下图:

 

 

二、查看进程

1、静态查看进程:ps命令

ps 命令可以查看静态进程,仅仅是捕捉某一个瞬间某一个进程的状态,类似于给进程制作快照。

使用 “ps aux” 命令查看当前目录的进程。

 每列显示的数据代表的意义如下:

USER 进程的用户 RSS   该进程占用的固定内存量(KB)
PID  进程的ID TTY 该进程在哪一个终端上运行(登录者的终端位置),若与终端无关,则显示(?)。若为pts/0等,则表示由网络链接主机进程
%CPU 进程占用的CPU百分比 START 该进程被触发启动时间
%MEM 占用内存的百分比 TIME 该进程实际使用CPU运行的时间
VSZ 该进程使用的虚拟内存量(KB) COMMAND 命令的名称和参数

查看进程按照CPU占用百分比的降序排列,使用该命令:ps aux --sort -%cpu

"ps -ef"命令查看UID、PID、PPID等信息。

 

 

2、动态查看进程:top命令

 top命令可以实时动态地显示进程,类似于Windows系统中的任务管理器。

使用top 命令动态查看进程时,进程信息分为上下两部分,上面为整体信息下面为每一个进程的信息。系统默认更新时间为3秒,也可以按回车键立即更新,具体如下所示。

 

我们现在一一分析这些字段的含义:

第一行

    • top - 14:55:31 表示当前时间,也就是当前真实的时间。

    • up 3:47,表示这个系统从启动到现在的时间。

    • 2 users 表示当前在使用这个机器的用户数量。

    • load average: 0.24, 0.08, 0.06 ,这个值表示系统过去1分钟,5分钟,15分钟的系统负载,即任务队列的平均长度。

      • 系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
      • 多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。

第二行

第二行主要表示当前系统当中任务的相关情况,所谓任务就是当前系统当中一共有多少个进程。

    • Tasks:235 totoal,这个表示当前系统当中一共有235个进程。

    • 1 runnung,表示有一个进程正在执行。

    • 234 sleeping,表示有234个进程处于睡眠状态,也就是不需要使用CPU的状态。

    • 0 stoped,表示有0个进程处于stopped状态,这个状态就是被停下来的进程,比如说通过ctrl+z让一个进程停下来,你可以通过给这个进程发送一个信号SIGCONT让这个进程恢复执行,linux当中进程的状态变换如下所示:

    • 0 zombie,这个就表示僵尸进程的个数,这里是0个僵尸进程,所谓僵尸进程就是一个进程执行完成了,对于C程序来说你可以理解为你的main函数执行完成了(这个不够准确,其实main函数执行完成之后还会有其他函数需要执行,但是这里你可以大致这么理解),如果这个时候(函数执行完成),这个进程的父进程却没有接受子进程发送给他的信号(子进程在执行完成之后会给父进程发送信号,父进程需要通过wait等系统调用去接受这个信号),那么子进程就处于zombie状态,处于这个状态的进程就需要父进程接受它发送的信号,然后子进程的系统资源就可以被回收了,然后子进程会彻底消亡。

命令格式:top [选项]

选项:

"-d"参数 设置刷新时间,以秒为单位 top -d 5(刷新时间)
“-p”参数 指定查看一个或多个进程的动态信息 top -p 10636,1(指定进程PID) 
"-u"参数 查看指定用户的进程 top -u apache(指定进程名)
“-n”参数 设置刷新次数,完成后自动退出 top -n 2(刷新次数)

 

三、信号控制进程

在进程运行过程中,若由于某些原因需要终止该进程,用户可以给予该进程一个信号(signal),进程接收到信号之后,就会依照信号的要求做出相应的反应。

1、 kill命令

Linux中的kill命令用来终止指定进程的运行。首先使用ps / pidof / top 等工具获取进程 PID,然后使用kill命令来杀死该进程。kill命令通过向进程发送指定的信号来结束相应的进程,在默认情况下,采用编号为15的 TERM信号。使用kill -l命令查看全部信号,具体如下所示。

 常用的信号如下:

信号编号 名称 特性及意义
1 SIGHUP 启动被终止的进程,重新加载,PID不会发生变化
9 SIGKILL 强制终止进程,使用此信号可能导致进程无法再次启动
15 SIGTERM 默认信号,以正常流程终止进程,允许进程释放资源。若进程已经出现问题,无响应,此信号将不起作用
18 SIGCONT 恢复进程
19 SIGSTOP 暂停进程

kill命令格式:  kill [参数] [进程号]

[注意] 

  • kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会默认发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:      kill -2 123

它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。

 

2、killall命令

killall 命令可以用于终止某个指定名称的服务所对应的全部程序。

四、进程优先级

1、基本概念

 cpu 资源分配的先后顺序,就是指进程的优先级(priority) 。优先级高的进程有优先执行权利。配置进程优先权对多任务环境的 Linux 很有用,可以改善系统性能。

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

SCHED_OTHER 调度策略使用的进程的相对优先级称为进程的 nice值,有40个不同级别,其范围为-20~19,数值越优先级越,数值越优先级越。例如,-20的优先级最高,该进程不倾向于让出 CPU;19的优先级最低,该进程容易将CPU 让给其他进程。

【注意】普通用户调整应用程序优先权值的范围为0~19,只有超级用户有权使用更高的优先权值。

2、查看进程优先级

A、使用top命令查看nice级别

使用top 命令动态查看进程时,进程信息分为上下两部分,上面为整体信息,下面为每一个进程的信息

 其中:

  • PID : 代表这个进程的ID号。
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的ID号。
  • PR :将nice级别映射到更大的优先级队列,-20映射到0,+19映射到39。
  • NI :代表这个进程的 nice 值。

B、使用ps 命令查看nice级别

在Linux系统中,用 ps –l 或 ps -al命令则会类似输出以下几个内容: