首页 > 代码库 > Linux下的进程管理

Linux下的进程管理


    在操作系统系统中,进程是一个非常重要的概念。

一、Linux中进程的相关知识

1、什么是进程呢?

    通俗的来说进程是运行起来的程序。唯一标示进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的。

2、进程的分类

    1)根据在linux不同模式下运行分为:

        核心态:这类进程运行在内核模式下,执行一些内核指令(Ring 0)。

        用户态:这类进程工作在用户模式下,执行用户指令(Ring 3)。

    如果用户态的进程要执行一些核心态的指令,此时就会产生系统调用,系统调用会请求内核指令完成相关的请求,就执行的结果返回给用户态进程。

    2)按照进程的状态可分为:

        运行态:running 正在运行的进程

        可中断睡眠态:进程处于睡眠状态,但是可以被中断

        不可中断的睡眠态:进程处于睡眠状态,但是不可以被中断

        停止态:stoped 不会被内核调度

        僵死态:zombie产生的原因是进程结束后,它的父进程没有wait它,所导致的。

    3)按照操作的密集程度

        CPU密集型:进程在运行时,占用CPU时间较多的进程。

        I/O密集型:进程在运行时,占用I/O时间较多的进程。

    通常情况下,I/O密集型的优先级要高于CPU密集型。

    4)按照进程的处理方式

        批处理进程:

        交互式进程:

        实时进程:

3、进程的优先级

    进程的有优先级,是用0-139数字来表示的,数字优先级从小到大依次是:0-99,139-100。

    优先级分为2类:

        实时优先级:0-99,是由内核维护的

        静态优先级:100-139,可以使用nice来调整,nice值的取值范围是[-20,19),分别对应100到139。nice默认值是0。

        动态优先级:由内核动态维护,动态调整。


二、进程的管理工具

1、pstree命令 查看进程数。 常用用法如下:

wKioL1PLqdyyIb19AAEMNH_9wPY525.jpg

2、ps 命令 查看进程的相关状态。支持SysV和BSD两种风格的选项。

    常用选型:

        a  与终端相关的进程

        x  与终端无关的进程

        u  显示运行进程的用户

    常用组合选项:ps aux

wKiom1PLsWrBbbpGAAMO4REz0So556.jpg

# 下面分别来说明上图的各个字段的含义
# USER   进程以什么用户身份运行
# PID    进程描述符 具有唯一性
# %CPU   进程运行时所占的cpu百分比
# %MEM   进程运行时内存所占的百分比
# VSZ    Virtual memory SiZe 虚拟内存使用大小
# RSS    常驻内存集,所有不能被置换出去的内存集
# STAT   表示内存状态
#    常用的状态有:
#    S:可中段睡眠状态
#    R:运行态
#    D:不可中断睡眠态
#    T:停止态
#    Z:僵尸态
#    s:session leader 所谓进程的领导者
#    +:表示是前台进程
#    l:多线程进程
#    N:低优先级进程
#    <:高优先级进程
# TTY 用来表示终端 显示为“?”的说明是与终端无关的进程
# START 进程开始时间
# TIME 进程运行时间
# COMMAND 执行进程的命令 如果命令被 "[]"包围,说明是内核线程

        -e 显示所有进程

        -f 显示完成格式信息

    常组合在一起使用:ps -ef

wKiom1PLtv3AM8G8AAIzFXcrn_M342.jpg

    但是有些这种情况下,我们的命令有时候显示不完整

wKioL1PLt_HRegDWAAFNVp3t6Hw292.jpg

    此时想要显示完成就要 ps -efww

wKioL1PLuLPhBEpsAAIah-16qRE706.jpg

        -F:显示额外信息

        -H:显示进程的层次结构

    常用组合方式:ps -eFH

wKiom1PLuWaShIYVAAHLO4AzcZA175.jpg

    可能以后我们用到最多的选项:

        -o 我们可以自定义显示字段

# 常用的有:
# pid    command    psr    pri    ni    %cpu     %mem    rsz    vsz等

 wKioL1PLvOPC-vh8AAEWrtgKOts189.jpg

3、pgrep,pidof

    pgrep 常用选型:

        -U 查看指定用户的进程号

        -G 查看指定用户组的进程号

        -l 显示进程名和进程号

wKioL1PLvhCQMqZ0AAD7aQPiG9s329.jpg

    pidof:只显示已启动进程的PID

[root@server ~]# pidof httpd # 没启动的进程不显示
[root@server ~]# pidof man
5283


4、top命令

    实时监控系统资源

    

# 执行top命令后,进入交互式模式

wKiom1PLwTvzUMNsAASsHaYJe14951.jpg

# top中的一些交互式命令:
# l:控制是否显示第一行,负载均衡信息
# t:控制是否显示进程信息由和cpu信息
# m:控制是否显示内存,交换信息
# I 或者 1(数字):是否分别显示cpu每个信息
# M: 按%mem排序显示,从大到小
# k: kill 杀掉进程
# s:修改默认刷新时间 默认是3秒

# 下面解释抬头信息:
top - 21:35:17 up 10:03,  4 users,  load average: 0.00, 0.00, 0.00
#   系统时间   启动时间 登录用户数    负载均衡:1min 5min 15min
# 何为系统负载?在这里指的是等待在进程队列里的平均进程数

Tasks: 165 total,   1 running, 164 sleeping,   0 stopped,   0 zombie
# 进程总数            运行数     睡眠态数        停止态数    僵尸进程数
Cpu(s):  0.0%us,0.0%sy, 0.0%ni, 100.0%id, 0.0%wa, 0.0%hi, 0.0%si,  0.0%st
# 0.0%us:user space:用户空间 
# 0.0%sy:system space:系统空间   
# 0.0%ni:nice值调用时间所占百分百比
# 100.0%id:系统空闲所占百分比
# 0.0%wa:用于等待I/O所占的百分比
# 0.0%hi:硬中断所占的百分比
# 0.0%si:软中断所占的百分比
# 0.0%st:系统被“偷走”的内存所占的百分比,一般指的是用于虚拟机的内存

Mem:   1012548k total,   396328k used,   616220k free,    99444k buffers
#       总内存大小     使用的内存大小    剩余内存大小    缓存的大小
Swap:  2097144k total,        0k used,  2097144k free,   144156k cached
#    交换分区总大小        使用的        剩余的            缓冲大小

    常用选项:

        -d #: 指定刷新时间间隔

        -b: 以批次的方式显示top的刷新

        -n #: 显示的批次

例如:top -d 4 -b 2 -n 3

4、htop

    htop命令是top命令的升级版,无论是在功能上还是在界面显示上,都比top命令更胜一筹。

        u: 交互式选择显示指定用户的进程

        l: 显示光标所在进程所打开的文件列表

        s: 显示光标所在进程执行的系统调用

        a: 绑定进程到指定的CPU

        #:快速定位光标至PID为#的进程上

    下图是htop的界面。

wKiom1PL1jHCpKO4AATAgaiStJA686.jpg

5、vmstat

    wmstat 查看虚拟使用情况

# 常用用法:
# vmstat 显示信息会默认1秒刷新一次,一直显示
# vmstart -n 2 显示信息会2秒刷新一次,一直显示
# vmstat  -n 1 4 显示信息会1秒刷新一次,刷新4次

[root@server ~]# vmstat -n 1 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 614392 100468 144776    0    0     2     1    6    5  0  0 100  0  0
 
# 我们解释一下每个字段的含义:
# procs字段 关于进程的
# r    指运行队列的进程数,如果过长,可能是cpu性能较低
# b    阻塞队列的长度,通常是用于等待I/O的完成。如果太大,说明I/O性能较低

# memory字段 关于内存使用的
# swap 使用的交换内存大小
# free 空余内存大小  它的值=总大小-buff-cache-used
# buff 缓冲大小,目的是为了加速I/O的写操作(一般是磁盘)
# cache 缓存大小,摸底是为了加速I/O的读操作(一般是磁盘)

# swap字段 说明交换内存
# si swapin 指的是数据进入交换内存的速率 单位:KB/s
# so swapout 指的是数据出交换内存的速率 单位:KB/s
# 如果这2个值比较大的时候,会出现抖动现象。建议增加内存

# io字段  I/O的说明
# bi:Block in 从块设备读入内存的速率 KB/s
# bo: block out 保存到块设备的速率 KB/s
# 这就是我们通常说的磁盘的读写性能,可以通过RAID提高。

# system字段 关于系统的
# in: interruppt 中断发生的速率
# cs: 上下文切换的速率(进程调度)

# cpu字段 说明cpu的使用情况
# us:user space:用户空间 
# sy:system space:系统空间   
# id:系统空闲所占百分比
# wa:用于等待I/O所占的百分比
# st:系统被“偷走”的内存所占的百分比,一般指的是用于虚拟机的内存


未完待续.....

本文出自 “逆水寒” 博客,请务必保留此出处http://guoting.blog.51cto.com/8886857/1440640

Linux下的进程管理