作为初学者,Linux永远是那么神秘,高大上的内容我也不会,所以在这里只能整理一下与管理相关的命令了,如果有不对的或不准确的地方,请指正。
可参考:Linux内核--进程管理与调度http://www.linuxidc.com/Linux/2014-08/105366.htm
作用:列出当前的进程,以及它们的树状结构
用法:pstree [选项]
-a: 显示执行程序的命令与完整参数
在/proc/目录中包含了进程和内核模拟生成的伪文件,该路径下每个进程用自己的PID命名目录,目录里面包含了这个进程运行的各个参数。
内核参数在/proc/sys/目录中,可设置其值动态调整内核运行的特性。
用法:ps [选项]
选项有三种风格
1 UNIX options, which may be grouped and must be preceded by a dash.
2 BSD options, which may be grouped and must not be used with a dash.
3 GNU long options, which are preceded by two dashes.
常用选项组合之一:
# pstree aux
a:所有与终端相关的进程
x:所有与终端无关的进程
u:以用户为中心组织进程状态信息显示
显示字段含义:
USER 表示此进程以哪个用户身份运行
PID 表示进程号
%CPU 表示占用cpu利用率百分比
%MEM 表示占用物理内存百分比
VSZ 表示虚拟内存集大小,包含共享的数据空间
RSS 表示常驻内存集大小,位于物理内存,并不能被交换出去
TTY 表示此进程从哪个终端启动,问号?表示与终端无关的进程
STAT 表示进程状态
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:Stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程,一般表示该进程优先级别数值是负数
<:高优先级进程
s:session leader
START 表示进程起始时间
TIME 表示累计占用cpu的时间
COMMAND 表示由哪个命令启动,带中括号的是内核线程
常用选项组合之二:
# pstree �Cef
-e : 显示所有进程
-f : 显示完整格式的进程信息
部分字段含义:
PPID 表示此进程的父进程号
C 表示cpu的占用百分比
常用选项组合之三:
# ps �CeFH
-F:显示完整格式的进程信息
-H:以层级结构显示进程的相关信息
部分字段含义:
SZ 表示虚拟内存集大小,包含共享的数据空间
PSR 表示此进程运行在哪颗cpu上
常用选项组合之四:
# ps �Ceo <FIELD1,FIELD2,…>
或
# ps axo <FIELD1,FIELD2,…>
o FIELD1,FIELD2,… : 自定义要显示的字段列表,以逗号分隔
常用的FIELD:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
ni : nice值
pri : priority 优先级
rtprio : real time priority,实时优先级
pcpu : cpu的利用率
用法:pgrep [options] pattern
-u uid:effective user
-U uid:read user
-t TERMINAL:与指定的终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-P pid:显示此进程的子进程
[root@localhost ~]# pidof sshd
3987 2368 1062
[root@localhost ~]# uptime
00:06:21 up 7:12, 2 users, load average: 0.00, 0.01, 0.05
load average:等待运行的进程队列的长度在过去1分钟、5分钟和15分钟的平均负载
用法:
# top -d 2 :指定2秒延迟时长刷新显示,单位是秒
# top -b :批模式
# top -bn 2 :在批模式下,共显示2批
显示含义:
第一行信息是uptime命令的显示内容
第二行显示的是所有启动的、目前运行的、挂起( Sleeping )的和无用( Zombie )的进程数量
第三号显示的是目前CPU的使用情况,依次为
us用户使用比例
sy系统占用的比列
ni调整以后额外占用的时间百分比
id闲置( Idle)比例
wa等待IO完成占用的百分比
hi处理硬件中断消耗的百分比
si处理软件中断消耗的百分比
st被当前主机上虚拟化技术所分走的百分比
第四行显示物理内存的使用情况,包括总的可以使用内存、空闲内存、已用内存、buff/cache占用的内存
buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取。
buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及tracking in-flightpages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。
第五行显示交换分区的使用情况,包括总的、空闲的、已用的和可用的内存空间大小
第六行显示项目如下:
PID : 进程号
USER : 进程所有者
PR : 进程的优先级别
NI : nice值
VIRT : 进程占用的虚拟内存值
RES : 进程占用的物理内存值
SHR : 进程占用的共享内存值
S : 进程的状态,参见ps命令
%CPU : 该进程占用的CPU使用率
%MEM : 该进程占用的物理内存的百分比
TIME+ : 进程启动后在CPU上运行的时长
COMMAND : 进程启动的启动命令
在top命令使用的过程中,还可以使用一些交互式的命令来完成其他功能,可用以下快捷键:
M: 根据驻留内存大小进行排序
P: 根据cpu使用百分比进行排序
T: 根据累计时间进行排序
l: 是否显示平均负载和启动时间
t: 是否显示进程和cpu状态相关信息
m: 是否显示内存相关信息
c: 是否显示完整的命令行信息
s:修改刷新时间间隔
<空格键>:立即刷新
k:终止指定的进程
q: 退出top
htop是top命令在功能上的一个升级命令,因此两者的显示和使用习惯比较相似,但是htop命令需要手动安装,并且在发行版光盘上没有它的安装包,需要通过其他途径获得,建议用yum指向的epel源安装
htop的功能很强大,还能支持鼠标操作,显示项目内容和top命令类似,这里只说一下它的交互命令
u: 仅显示指定用户的进程
s: 以指定字段显示
l: 显示选定的进程打开的文件列表
s: 跟踪选定的进程的系统调用
t: 以层级关系显示各进程状态
a: 将选定的进程绑定至某指定的CPU核心
更多帮助按F1键获得
用法:vmstat [options] [delay [count]]
# vmstat 2 5 //表示每5秒采集一次,共采集5次
-s : 显示内存相关统计信息
-d : 显示磁盘相关统计信息
-S : Switches outputs between 1000 (k), 1024 (K), 1000000 (m), or 1048576 (M) bytes. Note this does not change the swap (si/so) or block (bi/bo) fields.
显示字段含义:
------procs------
r:等待运行的进程的个数;CPU上等待运行的任务的队列长度
b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度
------memory------
swpd:交换内存使用总量;
free:空闲的物理内存总量;
buffer:用于buffer的内存总量;
cache:用于cache的内存总量;
------swap------
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap的速率(kb/s)
------io------
bi:从块设备读入数据到系统的速度(kb/s)
bo:保存数据至块设备的速率(kb/s)
------system------
in:interrupts,中断速率
cs:context switch, 上下文 切换的速率
------cpu------
us: user space
sy:system
id:idle
wa:wait
st: stolen
如果bi和bo长期不等于0,则表示物理内存太小
用法:pmap [options] pid [...]
-x:显示详细格式的信息
另一种查看方式:cat /proc/PID/maps
-terminate a process
作用:用于向进程发送信号,以实现对进程的管理
显示当前系统可用信号:
# kill �Cl
每个信号的标识方法有三种:
1) 信号的数字标识
2) 信号的完整名称
3) 信号的简写名称
向进程发信号:
# kill [-s signal|-SIGNAL] pid...
常用信号:
1) SIGHUP:无须关闭进程而让其重读配置文件
2)SIGINT:终止正在运行的进程,相当于Ctrl+c
9)SIGKILL:杀死运行中的进程
15)SIGTERM:终止运行中的进程
18)SIGCONT
19)SIGSTOP
-kill processes by name
# killall [-SIGNAL] program
前台作业(foregroud):通过终端启动,且启动后会一直占据终端
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端)
如何让作业运行于后台?
(1) 运行中的作业
Ctrl+z
注意:送往后台后,作业会转为停止态;
(2) 尚未启动的作业
# COMMAND &
注意:此类作业虽然被送往后台,但其依然与终端相关;如果希望把送往后台的作业剥离与终端的关系:
# nohup COMMAND &
查看所有的作业:
# jobs
可实现作业控制的常用命令:
# fg [[%]JOB_NUM]:把指定的作业调回前台
# bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
# kill %JOB_NUM:终止指定的作业
0-139 种优先级,数字越小,优先级越高
100-139 :用户可控制
0-99: 内核调整的
优先级高可以:
1、获得更多的CPU运行时间
2、更优先获得运行的机会
可通过nice值调整的优先级范围:100-139
其nice值分别对应于:-20, 19
进程启动时,其nice值默认为0,其优先级是120
nice 值:数值越小,优先级调高
普通用户只能调大自己进程的nice值
仅管理员可调低nice值
以指定的nice值启动并运行命令
# nice [OPTION] [COMMAND [ARGU]...]
选项:-n NICE
# nice �Cn 1 ls > 1.txt
允许用户修改一个正在运行的进程的优先级
# renice [-n] NICE PID...
查看Nice值和优先级:
# ps axo pid, ni, priority, comm