8. 进程管理

8.1 进程的概念

进程:应用程序或者数据在系统中按照顺序执行的活动过程,是操作系统架构基础;

本小节内容请学习操作系统原理,如已学习,可跳过不看

OS = kernel + process:进程只能运行在CPU和内存中

进程特性 :动态性 并发性等

CPU分环运行:

  • 0环:特权环,运行内核 (内核空间)
  • 1-2 环:库文件
  • 3环 :进程环(用户空间)

CPU一个时间点只能运行一个程序,按照时间片

例:mkdir: mkdir /data :system call :系统 I/O

  1. task struck:进程的数据结构(存放在内核中)
  2. task struce结构:状态 进程信息和内核栈 运行列表(指令等) MM(内存管理单元)
  3. PID :进程ID 群组信息 用户信息 文件系统 文件描述符等

MMU:memory mangement unit :内存管理单元

context switch :进程切换,上下文切换

8. 进程管理 - 图1

进程内存结构:forbidden:内核空间

program text:指令

data+bss:全局变量

heap:堆空间

shared library :共享库

stack:栈空间,进程运行时调用的数据

thread:线程,轻量级进程

运行进程的模式:多进程模式(每一个请求生成一个进程:进程切换)
单进程多线程:每个线程去响应

lock:死锁,自旋锁等

kernel :内存管理 网络管理 安全管理 驱动管理 进程管理等

进程:父子关系 进程状态 优先级

进程优先级:0-139 数字,共140个优先级

  • 0-99 :系统优先级(用户不可控优先级)
  • 100-139:nice值(用户可控优先级);-20 到19;
  • root用户可以调整nice值;普通用户只能调0-19

高优先级进程:获取更多的CPU运行时长,更优先的让CPU执行

大O标准:O(1) O(n) O(logn) O(2^n) O(n^2)

8.2 进程管理命令

进程分类:

        和终端相关的进程:用户进程


        和终端无关的进程:内核进程

8.2.1 ps

process status :进程状态查看,运行ps那个时刻系统进程状态;

BSD风格(不使用连字符),sys V风格使用连字符),GNU长选项(使用两个连字符)

  • a:显示和终端有关的进程
  • u:显示进程用户的信息
  • x:显示和终端无关的进程
  • -e:显示所有进程信息
  • -l:显示进程长格式
  • -F:显示进程的完整信息
// 命令:ps au   //数据格式解析
USER:该进程是有哪个用户发起的
PPID:父进程号
PID:进程号/proc目录存放着进程相关的信息。
            在CentoS7中PID为1的进程是systemd
            在CentOS6中PID为1的进程是init进程
%CPU:该进程占用的CPU百分比
%MEM:该进程占用内存的百分比
VSZ:虚拟内存集(计算进程所占物理内存时,物理内存包括共享库的空间)
RSS:常驻内存集(进程中不能被交换出去的)
TTY:运行在哪个终端
STAT:进程状态
            D:不可中断睡眠状态
            S:可中断睡眠状态
            R:运行状态
            T:停止状态
            z:僵尸状态
            s:session leader (会话的领导者)
            <:优先级较高的进程(用户不可控)
            N:优先级较低的进程(用户可控进程)
            1:多线程进程
            L:在内存中锁定分页
            +:前台进程组中的进程

START:进程启动时间
TIME:该进程在CPU中实际运行的时长
COMMAND:该进程命令名称

//ps -elF :结果解析
//部分解析在上面已经介绍,不再重复,仅介绍几个常用的。
    PRI :系统分配的优先级(用户不可更改)
    NI:nice值
//调整进程的nice值的命令:
    调整正在运行进程nice,(调整nice值就是为了影响系统优先级)
        renice [nice number]  PID
    指定进程运行的nice值(让某个'命令'以指定nice运行)
        nice  -n  [nice_number]  COMMAND

8.2.2 top
//top结果解析
第一行:当前系统时间   系统运行时长   登录系统的用户个数  过去1分钟,5分钟,15分钟平均负载
第二行:进程总数  正在运行的进程数   睡眠的进程数  停止状态进程数  僵尸状态进程数
第三行:CPU相关信息(按1键可查看每个CPU的信息):us:用户进程所占CPU百分比  sy:系统进程所占CPU百分比  ni:nice所占CPU百分比  id:空闲进程所占CPU百分比  hi:硬件中断所占CPU百分比  si:软件中断所占CPU百分比  st:被hypervisor偷走的CPU的百分比
第四行:物理内存相关信息
第五行:交换分区相关信息 

top交互式命令:
    M:按所占内存百分比进行排序
    P:按所占CPU百分比进行排序
    T:按进程运行时长进行排序
    c:是否显示command这一列的完整路径
    l:是否显示top第一行
    t:是否显示top第二行和第三行
    m:是否显示内存的相关信息
    k:杀死某个进程
    q:退出top进程

8.2.3 其他相关命令
  • pstree:查看进程树
  • pgrep :查看某个进程的PID 号 pgrep process_name
  • pidof :查看某个进程的PID 号 pidof process_name
  • kill :杀死某个进程(向进程传递某个信号)

    • kill -l :查看信号列表
    • 信号列表( 信号:进程间的通信 IPC )

      • 1:SIGHUP :不停止服务的情况下,重新读取配置文件,并且应用配置文件中的设置
      • 2:SIGINT:(Ctrl+C):中断某个进程
      • 9:SIGKILL:强制杀死某个进程
      • 15:SIGTERM:终止某个进程(默认信号)
    • kill 语法:

      • kill - sig_number PID
      • kill - sig_name PID
      • kill %number :杀死后台某个作业,%不能省略
  • killall :杀死整个进程树,用法同kill
  • 前台进程:利用终端执行的进程
  • 后台进程:运行执行时不利用终端进行执行的进程
  • 前台 ——> 后台:(前台调入后台)

    • Ctrl+z:把正在运行的进程调入后台,并停止运行
    • &:启动时直接调入后台运行
  • jobs:查看后台运行的作业

    • + :下一次将要运行
    • -:下一次将要运行的第二个后台作业
    • kill %1:杀死后台运行号为1的进程(注意加%)
  • bg:把进程调入后台继续运行
  • fg:把后台进程调入前台继续运行 ‘fg num’