在Linux操作系统中,进程应该是重中之重。很多攻击的发动、黑客的入侵都是通过进程来实现的,以至于很多软件的BUG、系统的故障、硬件的检测等等,我们都可以通过进程的管理来判断。因为,进程管理对Linux运维工程师来说,至关重要。
1. 进程的相关概念
1.1 进程是什么?
进程是运行中的程序的一个副本;存在生命周期,创建开始运行,运行结束退出
通俗来讲,进程就是运行中的程序
1.2 进程创建
进程都是由其父进程创建,进程间存在着父子关系
这里以CentOS 6为例,其父进程为 init,我们可以通过pstree命令查看
[[email protected] ~]# pstree init─┬─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─dbus-daemon───{dbus-daemon} ├─hald─┬─hald-runner─┬─hald-addon-acpi │ │ └─hald-addon-inpu │ └─{hald} ├─httpd───8*[httpd] ├─login───bash───htop ├─master─┬─pickup │ └─qmgr ├─5*[mingetty] ├─rsyslogd───3*[{rsyslogd}] ├─sshd─┬─sshd───bash───htop │ └─sshd───bash───pstree ├─udevd───2*[udevd] └─xinetd
启动进程的方式:
系统启动过程中自动启动:与终端无关的进程;
用户通过终端启动:与终端相关的进程;
1.3 进程优先级
0-139:
1-99:实时优先级;数字越大,优先级越高
100-139:静态优先级;数字越小,优先级越高;
可以通过修改一个进程的Nice值来调整进程的静态优先级,仅管理员可以调低静态优先级
1.4 进程类型
进程类型:
守护进程 : 在系统引导过程中启动的进程,跟终端无关的进程;
前台进程:跟终端相关,通过终端启动的进程
注意:也可把在前台启动的进程送往后台,以守护模式运行;
1.5 进程状态
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped
僵死态:zombie
2. ps命令
ps 用来显示当前系统进程状态
用法:ps [OPTION]
[OPTION] 有三种风格:
UNIX风格:带"-" 例: ps -ef
BSD风格 :不带"-" 例: ps aux
GNU风格 :长格式 例: ps --user root
2.1 BSD风格的选项
a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
常用组合之一:aux
[[email protected] ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 17128 1316 ? Ss Mar22 0:03 /sbin/init root 2 0.0 0.0 0 0 ? S Mar22 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Mar22 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S Mar22 0:03 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S Mar22 0:00 [stopper/0] root 6 0.0 0.0 0 0 ? S Mar22 0:00 [watchdog/0] root 7 0.1 0.0 0 0 ? S Mar22 2:26 [events/0] root 8 0.0 0.0 0 0 ? S Mar22 0:00 [events/0] root 9 0.0 0.0 0 0 ? S
其中首部各字段的含义:
USER :启动进程的用户
PID: 进程号
%CPU :累积CPU使用时间百分比
%MEM : 内存占用百分比
VSZ:虚拟内存集;占用的虚拟内存大小
RSS:Resident Size,常驻内存集;不能放在交换内存上
TTY:与其相关的终端
COMMAND: 由那个命令启动此进程
带[]的进程表示内核线程
STAT: 状态
R:running 运行态
S:interruptable sleeping 可中断睡眠态
D:uninterruptable sleeping 不可中断睡眠态
T:Stopped 停止态
Z:zombie 僵死态
+:前台进程 运行在终端上
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader 会话引领者
2.2 UNIX风格的选项
-e:显示所有进程
-f:显示完整格式的进程信息
-F:显示更完整格式的进程信息;
-H:以层级结构显示进程的相关信息;
-o: 自定义要显示的字段列表
常用组合之二:-ef
常用组合之三:-eFH
常用组合之四:-eo, axo
[[email protected] ~]# ps -eFH UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 2 0 0 0 0 0 Mar22 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 Mar22 ? 00:00:00 [migration/0] root 4 2 0 0 0 0 Mar22 ? 00:00:03 [ksoftirqd/0] root 5 2 0 0 0 0 Mar22 ? 00:00:00 [stopper/0] root 6 2 0 0 0 0 Mar22 ? 00:00:00 [watchdog/0] root 7 2 0 0 0 0 Mar22 ? 00:02:27 [events/0] root 8 2 0 0 0 0 Mar22 ? 00:00:00 [events/0] root 9 2 0 0 0 0 Mar22 ?
与 ps aux类似,其中不一样的首部字段信息:
PPID:父进程的进程号
STIME:启动时间
TIME:累计运行时间
C: cpu utilization CPU的占用百分比
PSR:运行于哪颗CPU之上
CMD: 启动此进程的命令
SZ=VSZ 虚拟内存集;占用的虚拟内存大小
3. top命令
top 动态显示Linux系统进程信息
3.1 排序方式
P:以占据CPU百分比排序;默认为P
M:以占据内存百分比排序;
T:累积占用CPU时间排序;
3.2 隐藏/关闭首部信息
l: uptime信息 也可以在命令行使用uptime命令显示
t: tasks及cpu信息
m: 内存信息
3.3 首部字段的含义
[[email protected] ~]# top top - 20:15:10 up 1 day, 11 min, 3 users, load average: 0.00, 0.01, 0.00 Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3%us, 1.0%sy, 0.0%ni, 90.0%id, 8.7%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1004768k total, 528624k used, 476144k free, 128244k buffers Swap: 2097148k total, 0k used, 2097148k free, 219320k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6565 root 20 0 109m 1872 1240 S 0.7 0.2 8:31.44 htop 17919 root 20 0 110m 2024 1236 S 0.7 0.2 1:20.08 htop 1 root 20 0 17128 1316 1068 S 0.0 0.1 0:03.08 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:03.37 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.20 watchdog/0
top:
load average : 平均负载
Tasks:
# total 运行有多少个进程
%Cpu:
us 用户空间进程占用百分比
sy 内核空间进程占用百分比
ni nice调整额外占用的百分比
id 空闲百分比
wa 等待io完成时间百分比
hi 处理硬件中断所占用的百分比
si 处理软件终端所占用的是百分比
st 被虚拟化程序偷走的时间百分比
KiB Mem:
total 总空间
free 空闲空间
used 已使用空间间
buff/cache 用于缓存和缓冲的空间
avail Mem :可用内存空间
3.4 命令选项
-d #:指定刷新时间间隔,默认为3秒;
-b:以批次方式显示;
-n #:显示多少批次;
例:
~]# top -d 5 -b -n 2
3.5 htop命令
top的升级版,可支持鼠标操作
top的内建命令和选项 htop都可兼容使用
额外的常用选项和子命令
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
注:htop不是系统自带的,需要自己额外安装
4. dstat命令
dstat 多用途工具生成系统资源统计数据(非常强大的一款工具)
用法:dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,...,total 看那颗CPU信息
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal 某一块磁盘的相关信息
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-i: 显示中断的信息
-l: 显示平均负载
-n:Interface的相关统计数据; 网络
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据; 交换内存
-y: 显示system
-t: 统计当前时间
--tcp TCP链接相关数据
--udp
--raw
--socket
--ipc 进程间通信的相关数据
--top-cpu:最占用CPU的进程
--top-io:最占用io的进程
--top-mem:最占用内存的进程
--top-lantency:延迟最大的进程
5. kill命令
5.1 kill命令
kill 用于向进程发送信号,以实现对进程的管理
每个信号的标识方法有三种:
1) 信号的数字标识;
2) 信号的完整名称;
3) 信号的简写名称;
用法: kill [-s signal|-SIGNAL] pid...
显示当前系统可用信号:
kill -l [signal]
向进程发信号:
kill [-s signal|-SIGNAL] pid...
常用信号:
1) SIGHUP:无须关闭进程而让其重读配置文件;
2)SIGINT:终止正在运行的进程,相当于Ctrl+c
9)SIGKILL:杀死运行中的进程;
15)SIGTERM:终止运行中的进程;
18)SIGCONT:继续
19)SIGSTOP:停止 相当于Ctrl+z
例:杀掉htop进程
[[email protected] ~]# pgrep htop 18099 [[email protected] ~]# kill -9 18099
5.2 killall命令
killall 根据进程名来杀掉进程
用法:killall [-SIGNAL] program
例:杀掉htop进程
[[email protected] ~]# killall htop