进程管理

程序:程序是完成某些功能的代码的集合, 保存在磁盘上的文件

进程:是程序运行之后,在内存中的状态,运行的程序会产生一个或多个进程

/proc目录下蓝色数字目录,都是进程号

进程的生命周期:

进程的生命周期

  • 创建:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
  • 就绪:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行。
  • 执行:进程处于就绪状态被调度后,进程进入执行状态。
  • 阻塞:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
  • 终止:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

进程的查看

静态查看:ps、pgrep

动态查看:top

查看进程 PID:pgrep

ps

监视系统进程的主要工具,显式的是瞬间的进程状况

1
2
3
ps -elf
ps -aux
ps -axo

选项说明:

1
2
3
4
5
6
7
8
9
-e:显示所有进程

-f:全格式显示

a:显示所有进程(包含其他用户的进程)

u:显示进程的拥有者

x:和a一起使用,显示所有进程(包含无控制终端的进程)  TTY为?的进程
1
2
3
❯  ps -ef
拥有者  进程号 父进程ID cpu使用资源百分比 开始时间 运行进程的终端名 进程运行时间  命令
UID    PID    PPID         C         STIME       TTY          TIME     CMD

pts:伪终端、虚拟终端

tty1–tty6: 字符终端

1
2
3
4
5
6
7
8
❯ ps -aux
USER  PID %CPU %MEM  VSZ   RSS TTY  STAT START   TIME COMMAND
                       
VSZ:占用的虚拟内存的大小
RSS:驻留内存大小
STAT:终端进程状态
START: 开始时间
TIME:运行时间

STAT:进程状态

  1. R:该进程正在运行或就绪
  2. S:休眠进程
  3. Z:僵尸进程,实际上该进程已经终止,但是它的父进程却无法正常终止它,造成僵尸状态
  4. T:该进程正在跟踪或者已经终止

pstree

以树形显示正在运行的进程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
❯ pstree
systemd─┬─1panel───6*[{1panel}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─2*[agetty]
        ├─atd
        ├─auditd───{auditd}
        ├─chronyd
        ├─containerd───8*[{containerd}]
      	......

top

实时查看系统的运行状态

top

  • 统计信息区(共五行)
    1. 当前系统时间、系统运行时间、当前登录系统数、系统平均负载:1min 5min 15min
    2. 任务(进程):总数、正在运行的、休眠的、停止的、僵尸进程
    3. CPU 状态(%):用户空间、内核空间、改变过优先级的、空闲的、IO 等待的、硬中断、软中断、虚拟机
    4. 内存状态(K):总量、空闲的、使用中的、缓存的
    5. swap状态(K):总量、空闲的、使用中、缓冲的
  • 进程信息区
    1. PID - 进程 id
    2. USER - 所有者
    3. PR - 进程优先级
    4. NI - nice 值,负值表示高优先级,正值表示低优先级
    5. VIRT - 进程使用虚拟内存量,单位 kb
    6. RES - 进程使用的、未被换出的物理内存大小,单位 kb
    7. SHR - 共享内存大小,单位 kb
    8. S - 进程状态
    9. %CPU - 上次更新到现在的 CPU 时间占用百分比
    10. %MEM - 进程使用的物理内存百分比
    11. TIME+ - 进程使用的物理内存百分比
    12. COMMAND - 进程命令

top操作:

  • 1 – 展开cpu信息
  • f – 更改显示内容
  • M – 根据驻留内存大小进行排序。
  • P – 根据CPU使用百分比大小进行排序
  • q – 退出

watch 命令

1
2
3
4
5
6
功能:每多少秒(默认为 2 秒)执行一次后面的命令

语法:watch [选项] '命令'

选项:
    -n  指定命令执行间隔时间(秒)

示例:每秒执行一次 ps aux

1
watch -n1 'ps aux'

watch

进程的控制

进程前后台调度

写一个脚本 test.sh

1
2
3
4
#!/bin/bash
while :;do
    :
done
  1. 前台运行

    1
    
    [root@localhost tmp]# ./test.sh
    
  2. 后台运行

    1. 在执行的时候,直接将其放置于后台运行

      1
      2
      
      [root@localhost tmp]# ./test.sh  &
      [1] 32806   
      
    2. 对于已经在前台运行的命令,ctrl+z 将放在后台暂停

      image-20240604112038232

    3. bg 任务编号:指定任务在后台运行

      bg

    4. fg 任务编号:将后台运行的命令变成前台运行

      fg

注意:不管前台运行,还是后台运行,只要终端一关闭,进程就停止了。

因为终端运行的进程是当前终端 bash 的子进程

如何解决?nohup

1
2
[root@localhost ~]# nohup /tmp/test.sh &
[1] 32928

通过信号控制进程

如何终止一个进程?

  1. 前台进程 使用 ctrl+c
  2. killpkillkillall等命令

kill

通过进程的 PID 来操作

1
语法:kill -信号 pid     # 信号可以是数字或名称

信号的列表:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@localhost ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

常用的信号:

1
2
3
4
5
6
HUP:    1 重置进程的配置,即不停止服务的情况下,重新读取配置文件
INT:    2 中断(interrupt),ctrl+c       
QUIT:   3 优雅退出
KILL:   9 强制杀死进程    
USR1:  10 重新打开LOG       
TERM:  15 正常终止进程, 此信号为kill默认

pkill

通过进程的名称或属性进程操作

1
2
3
pkill test.sh      # 按照进程名字杀死进程
pkill -U 用户名     # 杀指定用户的进程
pkill -t 终端       # 结束指定终端上运行的进程,发送-9信号将踢掉该终端

killall:

killall命令名字 # 杀死全部的同名进程

xkill:杀死图形化资源

​ 当执行了xkill之后,鼠标会变成“x”形,点到任何图形资源,就会终止该资源的运行

进程的 nice 值

谦让值:nice

作用:指定或者调整用户进程的nice值

  • nice值越高,该进程抢占资源的能力越弱
  • nice值越低,该进程抢占资源的能力越强

范围:-20~19

相关命令

  • nice —— 运行时直接设置nice值

    用法: nice -n 数字 command

  • renice —— 对于已经运行的,调整nice值

    用法: renice 数字 PID