进程管理工具的使用

Linux进程管理工具: pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, job, 

 

pstree: 显示进程树

-p: 显示各进程的PID

 

ps: 显示进程状态的命令

 

Linux各进程的相关信息在/proc目录有一个以其PID命令的目录下的众多文件中;

支持两种使用风格:SysV, BSD

 

进程分类(根据进程是否通过终端启动):

与终端相关的进程: a

与终端无关的进程: x

 

常用组合1aux

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

 

VSZ: Virutal memory SiZe

RSS:常驻内存集

 

STAT:进程状态

Rrunning

S:可中断睡眠

D: 不可中断睡眠

T:停止

Zzombie

 

s: session leader

+: 前台进程,frontground

l: 多线程进程

N: 低优先级进程

<: 高优先级进程

 

COMMAND

[]: 内核线程

 

常用组合2-ef

-e: 显示所有进程

-f: 显示完整格式的进程信息

 

常用组合3-eFH

-F: 显示额外信息

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

 

自定义要显示的信息:axo FIELD

ps axo pid,command,psr,pri,ni

psr: 进程所运行在的CPU

pri: 优先级, priority

ni: nice

 

pgrep: 

-U UID:仅显示由指定运行的进程PID

-t term: 仅显示指定的终端设备的进程PID

-l: 显示进程PID的同时显示进程名

 

用法:pgrep [OPTIONS] [PATTERN]

PATTERN: 支持正则表达元字符书写模式实现进程过滤;

 

pidof: 根据进程名获取其PID

pidof PROGRAM

 

top: 

P: CPU百分比

MMemory占用量

TCPU累积时间占用量

 

l: top行信息是否显示;

load avg:

CPU上等待运行的进程队列的队列长度;

过去1分钟、5分钟、15分钟的平均长度;

 

t:是否显示进程及CPU相关的信息

1:是否单独显示每颗CPU的使用率

us: user space

sy: system

ni: nice

id: idle

wa: waiting io

hi: hardware interrupt

si: software interrupt

st: stolen

 

m: 是否显示内存及swap相关的信息

q: 退出top

s: 修改刷新时间间隔;

k: 杀死指定进程

 

常用选项:

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

-b: 以批次的显示;

-n #: 显示的批次;

 

htop: 

选项:

-d #: 刷新时间间隔

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

-s COLUMN: 以指定的字段进行排序

 

交互式命令:

u: 仅显示指定用户的进程

s: 跟踪选定进程发起的系统调用

l: 跟踪选定进程打开的文件

t: 显示进程树

a: 设定cpu亲缘性(将选定的进程绑定在某CPU上)

 

vmstat

procs:

r:等待运行的进程的个数;

b:处于不可中断睡眠态的进程个数;(被阻塞的进程队列的长度)

 

memory: 

swpd: 虚拟内存使用的总量;

free: 空闲的物理内存总量;

buffer:用于buffer的内存总量;

cache: 用于cache的内存总量;

 

swap

si: 数据进入swap中的速率(kb/s)

so: 数据离开swap中的速率(kb/s)

 

io: 

bi: 从块设备读入数据到系统的速率

bo: 保存数据至块设备的速率

 

system:

in: interrupts,中断速率

cs: context switch, 上下文切换速率

选项:

-s: 显示内存统计数据

 

 

回顾:进程管理基础概念进程状态查看工具

进程管理的基础概念:进程调度、进程优先级;

资源分配基本单位:CPU、内存、IO

CPUtimeslice

内存:虚拟内存、分布机制、MMU

IO:复用;

 

进程状态查看:/proc/#

pstree, ps, pgrep, pidof

top, htop, vmstat

 

Linux进程状态查看及管理(2)

pmap, glances, dstat, kill, job, bg, fg, nice, renice

 

pmap:查看指定进程内存映射关系

# pmap [OPTIONS] PID

-x: 显示扩展信息

 

# cat /proc/PID/maps

 

glances: 

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

 

-b: Byte为单位显示网卡数据速率;

-d: 关闭磁盘I/O模块

-f /path/to/somewhere: 设置输出文件的位置及其格式;

-o {HTML|CSV}

-m: 禁用mount模块

-n: 禁用网络模块

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

-1:每个CPU的数据单独显示

 

交互式命令:有许多交互式命令来定义glances的显示信息,以及排序方式等;

h: 显示帮助

 

C/S模式下运行glances命令:

服务模式:

glances -s -B IPADDR

 

IPADDR:自己监听的本机地址

 

客户端模式:

glances -c IPADDR

 

IPADDR: 远程服务器监听的地址

 

dstat: 支持插件

dstat [-afv] [options..] [delay [count]]

-c

-d

-g, --page

-i

-l

-m

-p

-r, --io

-s, --swap

-t, --time

-y, --sys

--aio: 显示异步io统计数据

--ipc: ipc相关的信息

--raw: raw socket

--tcp: tcp socket

--udp: udp socket

--socket: raw, tcp, udp

--unix: unix sock

 

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

--top-bio:显示最占用block IO的进程

--top-mem: 显示最耗费内存的进程

--top-io:最占用IO的进程

 

IPC: 进程间通信

message queue, semerphore, shared memory, signal

 

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

显示可用信号:

kill -l

man 7 signal

 

向进程发信号:

kill [-SIGNAL] PID

 

SIGNAL:

(1) 信号的完整名称,例如SIGHUPSIGINTSIGKILLSIGTERMSIGCONTSIGSTOP

(2) 信号简称:HUPKILL

(3) 信号数据标识:12, ...

 

SIGHUP1, 让进程重读配置文件中的信息,而无须重启进程;

SIGINT2, interrupt,打断正在运行中进程;相当于Ctrl+c

SIGKILL: 9, 强行中止正在运行的进程

SIGTERM15, 优雅关闭正在运行的进程

SIGSTOP19, 暂停进程

SIGCONT: 18,继续暂停进程

 

killall [-SIGNAL] COMMAND

 

Linux作业控制:job

 

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

后台作业:作业启动之后在后台运行;不通过启动,或在终端启动后直接转入后台运行;

 

如何让作业运行于后台?

1、运行中的作业:

Ctrl+z

注意:送往后台后,作业处于stopped状态;

2、尚未启动的作业:

COMMAND &

 

此类作业依然属于与终端相关的作业,因此,在终端结束时,其也会被终止;可以用下而的命令剥离其与终端的关系:

# nohup COMMAND &

 

查看作业:jobs

# jobs

 

作业控制命令:

# fg [[%]JOB_NUM]:把指定的作业调回前台

# bg [[%]JOB_NUM]:控制指定的作业于后台继续运行

# kill [%JOB_NUM]: 中止指定的作业

 

进程优先级调整:nice, renice

静态优先级:

100-139

  nice: -20, 19

 

   (1) 以指定的nice值启动一个进程:

   nice -n # COMMAND

 

   (2) 调整运行中的进程的nice值:

   renice -n # PID

 

   注意:普通用户仅有权限调大nice值;