Linux进程管理、任务管理

涉及到的命令:

pstree,ps,pidof,top,htop,vmstat,pmap,glances,dstat,kill,killall,jobs,bg,fg,nice,renice


=====================================================================

进程优先级:

140:0-139

1-99 静态优先级(数字越大,优先级越高)

100-139 实时优先级(数字越小,优先级越高)


进程的状态:

运行态:running

睡眠态:sleeping

可中断睡眠态:interrupt

不可中断睡眠态:uninterrupt (被IO阻塞的)

停止态:stopped(不可被调度运行)

僵死态:zombie

=====================================================================

进程管理:

    task struct :用于保存每个进程的元数据     <工作结构>

            例如:pid  ppid  memory...

    task  list :用一种称作“链表”的数据结构来保存每个进程的task struct


OS:提供虚拟的计算机,进而能够将有限的资源借助于“保护”机制分配多个同时运行的程序,即“进程”使用,从而实现了所谓多任务


进程:

    线程: tread   更轻量的、可被调度的运行单元


=====================================================================

Linux系统上除init意外的所有子进程,都是其父进程forck()自身而来,遵循COW机制,进程展现为“进程树”

pstree

    进程树查看

    -p    显示各个进程的PID


=====================================================================

ps命令:process stat

Linux运行中的内核的相关信息是通过/proc伪文件系统输出的;各进程都有一个以其PID命名的子目录,每个子目录中有许多文件,存储了进程的相关状态信息(非人类可读,哈哈)


支持众多选项:

两种风格:BSD风格(不带-)、SysV风格


根据进程启动时是否通过终端商的用户接×××互式启动的,可分为两类:

    与终端相关的进程:a 选项

    与终端无关的进程:x 选项

    以用户为中心组织进程状态显示信息: u 选项


常用选项组合1: aux


字段解释:

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND


VSZ:virtual memory size   虚拟内存集    线性地址空间占用空间大小

RSS:常驻内存集,指不可以被交换至swap分区中的数据占用空间大小

STAT:进程状态

    R:running  运行状态

    S:interruptibe  sleeping  可中断睡眠

    D:uninterruptibe  sleeping 不可中断睡眠

    T:stopped

    Z:  zombie


    s:session  leader   回话的主进程

    +:前台进程,占据当前终端

    l:多线程进程

    <:高优先级进程

    N:低优先级进程


START:  启动时间

TIME:  占用CPU累积时长

COMMAND:启动当前进程或现成的 命令行程序, [] 表示为内核线程


ps命令是静态的,查看的是命令执行时,系统上当前进程状态的信息快照


常用选项组合2:  -ef

-e  显示所有进程

-f    显示丰富格式信息 format

PPID    父进程ID


常用选项组合3:-eFH

-F:显示额外信息

-H:层级显示进程间关系


自定义需要查看想要的信息: o   通常使用axo

如:ps  axo pid,command,psr,pri,ni

psr:当前进程运行在那颗CPU上

pri:priority优先级  

ni:当前进程的nice值

        nice值 -20 到 19  数字越小优先级越高,越大优先级越低



=====================================================================

pidof命令:(没什么用,用ps一样可以过滤)

 pidof -- find the process ID of a running program

查找正在运行程序的PID

pidof  PROGRAM      program是程序名,必要时要使用程序名的绝对路径


=====================================================================

top命令:

    有许多交互式的子命令:

     P    占据cpu百分百排序

     M    占据memory空间大小排序

     T    CPU占用累积时长排序


     l    是否显示“第一行内容”系统负载...

     t    是否显示“第二行内容和第三行中的”,是否显示进程摘要信息及CPU负载状态

     1    数字1,平均或单独显示每颗CPU平均负载

     m    是否显示内存相关的状态信息


     s    修改刷新时间间隔(修改延迟时长)

     k    杀死某个进程

     q    退出命令



第一行内容:

load average: 0.00, 0.00, 0.00  系统负载,过去1分钟的平均负载,过去5分钟,过去15分钟   (等待CPU处理的队列长度)

队列长度合理区间最好不要超过:CPU颗数*0.7


uptime命令  =  top命令的第一行 

显示当前系统时间、运行时长、登录用户数及系统平均负载


第二行内容:

tasks:进程状态显示,多少运行状态,多少睡眠状态,多少停止态,多少僵死态



第三行内容:

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

us    user space用户空间的程序占用CPU百分比

sy    system (kernel space)内核空间程序占用CPU百分比

ni    nice,调整nice值以后,影响到的CPU百分比

id    idle,CPU空闲百分比

wa    wait io等待io

hi    hardware interrupt 硬件中断

si    software interrupt 软中断

st    stolen,被虚拟机“偷走”的时间百分比


对于一个繁忙的服务器来说,70%的us,30%的sy比较合适



PID  USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                       

PR    priority,其中RT表示实时优先级

VIRT   虚拟内存集

RES    常驻内存集

SHR    共享内存空间大小

TIME+   累积占用CPU时长


如果想显示所有进程信息

#top  -b   batch 批次显示

#top  -b  -n  2    显示的批次数量为2次,则退出

#top  -d  2    指明延迟时长,每两秒刷新一次

=====================================================================

htop 工具,需要指明epel源进行安装,比top工具更好用,这货居然还支持鼠标

交互式命令

u    仅显示选定用户的进程

s    跟踪个进程发起的系统调用,选中一个进程后按s

l    选中一个进程查看打开的文件和共享库

t    显示进程的层级关系

a    设定进程的CPU亲缘性,(将某个进程绑定在指定的CPU上)


常用选项

-d    延迟时长

-u  USERNAME  仅显示指定用户的进程

-s   COLUMN  根据指定字段进行排序显示




=====================================================================

vmstat命令

virtual memory stat  虚拟内存使用情况


vmstat  1  5   一秒钟显示一次,工显示5次,然后退出


输出内容解释

procs

    r     等待运行的进程的个数(队列长度)   

    b    不可中断睡眠状态的进程的个数,即被IO阻塞的队列长度


memory

    swpd    交换分区使用量,

    free    空闲的物理内存

    buffer    用于buffer的内存总量

    cache     用于cache的内存总量


swap

    si    数据唤入进入swap速率(kb/s)

    so    数据唤出swap的速率(kb/s)


io

    bi    从块设备中读入数据到系统的速率(kb/s)

    bo   数据保存至块设备的速率(kd/s)


system

    in    interrupt 中断速率,每秒钟发生的中断数

    cs    上下文切换,进程切换的速率


cpu

    us    用户空间使用百分比

    sy    内核空间使用百分比

    id    空闲百分比

    wa    等待io百分比

    st     被虚拟机偷走的百分比


选项

-s    显示内存各个状态统计数据 



/proc/#   接口,每个跟PID相同的目录下记录了进程的相关信息



=====================================================================

pmap命令:

PID对应内存映射,即查看指定进程的内存映射关系

pmap  [OPTION]  PID

    -x   显示扩展信息

也可以   cat  /proc/#/maps   


=====================================================================

glances工具EPEL源进行安装

glances工具

常用选项:

    -b    以Byte/s为单位显示网卡设备交换速率

    -d    关闭显示磁盘IO功能模块

    -f   /path/to/somefile   设置输出文件的位置及格式,要配合-o

    -o  {HTML|CSV}  设置输出格式

    -m    关闭显示mount功能模块

    -n     关闭显示网络功能模块

    -r    关闭显示进程列表功能模块

    -t  #  指明延迟时长,默认3秒,即刷新时长

    -1    数字1,单独显示每颗CPU相关负载数据


glances可以支持远程模式,即可以以C/S模式工作

server:以监听模式启动glances

client:以远程模式启动glances,远程连入指定服务器,并显示server上的相关性能数据


服务模式:

    glances  -s  -B  IPADDR

        -B  用于指明监听的本地地址   (本机IP)被监控端

客户端模式:

    glances  -c  IPADDR

            -c  用于连入的服务器IP  (要查看的IP)监控端



=====================================================================

dstat命令

整合了vmstat  iostat  netstat  and  ifstat四款工具的功能

    -c    显示CPU性能指标的统计数据  cpu

    -d    显示磁盘读写速率数据  disk

    -g    显示内存页面的唤进唤出速率数据  page

    -i    显示中断相关的速率数据  interrupt

    -l    显示平均负载,load average

    -m    显示内存相关的统计数据 memory

    -n    显示网络收发速率 network,Byte/s

    -p    显示进程相关的统计数据 process,每秒钟多少个

    -r    显示IO请求速率

    -s    显示swap相关数据

    -y    显示系统相关的数据(包括,interrupt,context switch)中断和上下文切换


    经常要用的,非常好用的选项:

    --top-cpu    显示最占用CPU的进程

    --top-bio    最消耗block io的进程

    --top-io    最消耗IO的进程

    --top-memory    最占用内存的进程

    --ipc    显示进程间通信相关的速率数据   

    --raw    显示裸套接字的相关数据

    --tcp    显示tcp套接字相关数据

    --udp    显示udp套接字相关数据

    --socket    =  --tcp  --udp  --raw 这三种的集合

    --unix     显示Unix sock接口相关的统计数据

    

    -a   =  -cdngy                 dstat  -a  =  dstat 1



=====================================================================

 IPC:进程间通信,常见形式:

    message queue消息队列 

    semaphore   旗语

    shared memory共享内存  

    signal信号


signal:传递给进程的短小信息

    Linux主机支持的进程间可用到的信号:

kill  -l   ,或者  man  7  signal   查看信号种类



向进程发信号:

用法:  kill  [-SIGNAL]  PID



信号表示方式:

    完整名称,例如SIGINT

    简写名称,例如INT

    数字代称,例如2

常用信号:

    SIGHUP     1      通知进程重读配置文件,但不用重新启动进程

    SIGINT     2      打断正在运行中的进程,相当于CTRL+C

    SIGKILL    9      强行中止正在运行的运程

    SIGTERM    15     安全中止正在运行中的进程

    SIGSTOP    19    暂停进程

    SIGCONT    18    继续运行制定进程


杀死一组相似的进程

用法: killall   [-SIGNAL]   PROGRAM

默认的信号是SIGTERM,15号



=====================================================================

作业管理

jobs命令

作业有前台作业和后台作业之分

前台作业:通过终端启动,并且在停止之前也会一直占据终端

后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为与终端无关的模式运行


如何让作业工作于后台:

    1、对于已经启动并处于运行中的作业

            Ctrl+z        注意:作业送往后台后,处于暂停状态

    2、对于尚未启动的作业

            COMMAND  &

    此两类方式相关作业,仍然与终端相关,这意味着,终端终止将会导致与此终端相关的所有作业被终止


    剥离进程与终端的关系

    #nohup    COMMAND &



作业查看:jobs

作业号,作业状态,启动命令行程序

作业控制:

fg  [[%]job_num]  把指定作业调回前台

bg  [[%]job_num]  把调往后台的作业在启动起来,并在后台继续运行,但此作业必须支持运行与后台

kill  %job_num  终止指定的作业

=====================================================================

进程优先级调整

静态优先级:

    通过修改进程的nice值,来调整其优先级;用户空间运行的程序都有nice值

        nice值:-20   ,19

        优先级:100,139

   默认启动时进程时,其nice值为0,其优先级为120

nice值越小,其优先级越大;反之其nice值越大,其优先级越小(普通用户只能改大nice值,降低优先级)


调整方法:

    1、对于尚未启动的进程,

        #nice  -n  NUMBER    COMMAND

    2、对于已经处于运行状态的进程

        #renice   -n  NUMBER  PID


=====================================================================

htop详解:  (重要)

   是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序



Shortcut   Key Function   Key Description               中文说明 

h, ?          F1     Invoke htop Help              查看htop使用说明 

S            F2     Htop Setup Menu htop          设定 

/            F3     Search for a Process          搜索进程 

\            F4     Incremental process filtering 增量进程过滤器

t            F5     Tree View                     显示树形结构 

<, >          F6     Sort by a column              选择排序方式 

[            F7     Nice - (change priority)      可减少nice值,这样就可以提高对应进程的优先级 

]            F8     Nice + (change priority)      可增加nice值,这样就可以降低对应进程的优先级 

k            F9     Kill a Process                可对进程传递信号 

q            F10    Quit htop                     结束htop 


F4可以过滤给出的字段,返回方法:F4->按住Ctrl+backspace删除过滤内容





命令行选项(COMMAND-LINE OPTIONS)不常用


-d --delay=DELAY     设置延迟更新时间,单位秒


-h --help           显示htop 命令帮助信息


-u --user=USERNAME    只显示一个给定的用户的过程


-p --pid=PID,PID…       只显示给定的PIDs


-s --sort-key COLUMN     依此列来排序


-v –version          显示版本信息



交互式命令(INTERACTIVE COMMANDS)



Space    标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程


U    取消标记所有进程


s    选择某一进程,按s:用strace追踪进程的系统调用


l    显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件


I    倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然


+, -    When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name.


a (在有多处理器的机器上)    设置 CPU affinity: 标记一个进程允许使用哪些CPU


u    显示特定用户进程


M    按Memory 使用排序


P    按CPU 使用排序


T    按Time+ 使用排序


F    跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。


K    显示/隐藏内核线程


H    显示/隐藏用户线程

k    ”杀死“进程,会出现支持的信号类型,可以搭配着space选中以后,然后按k键,会出现0-24的信号



=====================================================================

glances是什么 (重要)

Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具。 通过 Glances,我们可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况。


Glances 是一个用来监视 GNU/Linux 和 FreeBSD 操作系统的 GPL 授权的自由软件。


Glances 同时也提供了很多实用的选项。 其中我们能够在配置文件见到的一项主要的功能就是设置关键值及相应的标签 (careful[小心], warning[警告] 和 critical[严重]), 然后她会自动帮我们用不同颜色标出系统达到某个瓶颈的信息。


Glances 主要功能

CPU 信息 (用户的相关应用, 系统核心程序和空闲程序)

总内存信息,包括了物理内存,交换空间和空闲内存等等

之前的 1 分钟、5 分钟和 15 分钟平均的 CPU 负载

网络链接的下行和上行速度

处理器总数,以及其活动状态

硬盘 I/O 相关(读写)速度详情

当前挂载设备的磁盘使用情况

高 CPU 和内存使用的进程名,和相关应用的位置

在底部显示当前日期和时间

将消耗最高系统资源的进程用红色标出


常用选项:

a – 对进程自动排序

c – 按 CPU 百分比对进程排序

m – 按内存百分比对进程排序

p – 按进程名字母顺序对进程排序

i – 按读写频率(I/O)对进程排序

d – 显示/隐藏磁盘 I/O 统计信息

f – 显示/隐藏文件系统统计信息

n – 显示/隐藏网络接口统计信息

s – 显示/隐藏传感器统计信息

y – 显示/隐藏硬盘温度统计信息

l – 显示/隐藏日志(log)

b – 切换网络 I/O 单位(Bytes/bits)

w – 删除警告日志

x – 删除警告和严重日志

1 – 切换全局 CPU 使用情况和每个 CPU 的使用情况

h – 显示/隐藏这个帮助画面

t – 以组合形式浏览网络 I/O

u – 以累计形式浏览网络 I/O

q – 退出(‘ESC‘ 和 ‘Ctrl&C‘ 也可以)




远程使用glances:

服务端:  被监控的

[root@localhost ~]# glances -s

Glances服务器启动了 0.0.0.0:61209


客户端:监控端(1.33是被监控的主机IP)

[root@localhost yum.repos.d]# glances -c 172.20.1.33


=====================================================================