进程的概念
进程是系统进行资源分配的基本单位,当一个应用程序启动时就向内核发起请求,然后由进程创建出新的进程,此时应用程序就启动了。创建进程的进程此时被称作父进程,而被创建出来的进程被称为子进程,此外子进程不可脱离父进程而存在,当一个父进程被销毁时,其子进程也会一并被销毁。
在Linux中,进程被内核所管理,内核为每一个进程虚拟处一块内存空间,所以当进程被调度到内存中执行时,只能看到自己和内核,从而避免进程之间发生冲突,影响其他进程的运行。但是进程独立并不代表其不能互相通信,当进程之间需要通信时则会发起IPC的机制,而进程之间通信则可分为同主机之间进程通信和不同主机之间进程通信,同主机之间进程通信时,通常采用发信号、共享内存、互斥锁等机制进行;不同主机上的进程之间通信则采用套接字和RPC机制进行。
进程的状态
虽然现在的计算机都是多用户多任务的计算机,而上文已经说到启动一个服务时就会由进程启动另一个子进程,多任务则意味着可同时启动多个进程,但是站在CPU的角度来说,某一时刻在其之上运行的进程有且只能有一个,而其余进程则会被内核放置到为其准备的一段内存之中。所以进程在内存中是有状态之分的,按照其是否被调入CPU运行可分为:运行态、睡眠态、就绪态、停止态和僵死态。
进程管理相关命令之查看常用命令:ps、pstree、pgrep
ps:查看当前系统进程
用法 ps [OPTIONS]
-a:查看与终端相关的进程
-x:查看与终端无关的进程
-u:查看与用户相关的进程
-e:显示所有进程
-f:显示丰富格式信息
-H:显示层级信息,查看进程之间的“父子”关系
-o:用户自定义显示信息
例1:使用ps命令查看系统上与用户相关的进程的详细信息
[[email protected] ~]# ps -auf Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 4073 0.0 0.3 108472 1852 pts/0 Ss 07:52 0:00 -bash root 4207 0.0 0.2 110204 1044 pts/0 R+ 08:09 0:00 \_ ps -auf root 2891 0.0 4.7 141220 23628 tty1 Ss+ 06:10 0:01 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/a root 3177 0.0 0.3 108472 1924 tty2 Ss+ 06:13 0:00 -bash root 2861 0.0 0.1 4064 544 tty6 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty6 root 2859 0.0 0.1 4064 544 tty5 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty5 root 2857 0.0 0.1 4064 540 tty4 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty4 root 2855 0.0 0.1 4064 544 tty3 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty3
pstree:查看当前系统进程,以进程树形式显示
用法 pstree [OPTIONS]
-v:显示版本号
-u:显示与用户相关信息
-a:不显示每个程序的完整指令
例2:使用pstree命令查看当前系统进程树
[[email protected] ~]# pstree -h init─┬─NetworkManager─┬─dhclient │ └─{NetworkManager} ├─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─bluetoothd ├─bonobo-activati───{bonobo-activat} ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd ├─2*[dbus-daemon───{dbus-daemon}] ├─dbus-launch ├─devkit-power-da ├─gconfd-2 ├─gdm-binary─┬─gdm-simple-slav─┬─Xorg │ │ ├─gdm-session-wor │ │ ├─gnome-session─┬─at-spi-registry │ │ │ ├─gdm-simple-gree │ │ │ ├─gnome-power-man │ │ │ ├─metacity │ │ │ ├─plymouth-log-vi │ │ │ ├─polkit-gnome-au │ │ │ └─{gnome-session} │ │ └─{gdm-simple-sla} ...后面已省略
pgrep:过滤当前系统进程
用法:pgrep [OPTION] [PID]|[NAME]
-l:同时显示进程名和PID
例3:显示当前系统上与ssh服务相关的进程名和PID
[[email protected] ~]# pgrep -l ssh 2559 sshd 4066 sshd
动态交互式进程管理工具:top,htop,glances
top:以交互式界面查看和管理进程
常用用法: top [-dbn]
-b:以批次显示,并显示所有进程的状态
-d:指定刷新延时时长
-n:后接数字,指定显示的批次数量
交互式命令:
P:以占据CPU百分比大小排序
M:以占据Memory空间大小排序
T:cpu累积占据时间排序
l:是否显示uptime行
t:是否显示进程状态信息及cpu负载状态
1:显示cpu的平均负载
m:是否显示内存相关信息
q:终止显示
s:修改刷新时间间隔
k:后接pid,杀死指定进程
例4:查看当前进程并以批次显示,2秒刷新一次,一共显示2屏
[[email protected] ~]# top -b -d 1 -n 2 top - 09:51:03 up 3:41, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.4%sy, 0.0%ni, 98.9%id, 0.5%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 494164k total, 326476k used, 167688k free, 30680k buffers Swap: 1015804k total, 0k used, 1015804k free, 122340k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13 root 20 0 0 0 0 S 5.5 0.0 0:00.19 sync_supers 4744 root 20 0 15032 1100 828 R 1.8 0.2 0:00.02 top 1 root 20 0 19364 1536 1224 S 0.0 0.3 0:01.75 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 后续已省略... top - 09:51:04 up 3:41, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 1.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 494164k total, 326492k used, 167672k free, 30680k buffers Swap: 1015804k total, 0k used, 1015804k free, 122340k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4744 root 20 0 15040 1196 916 R 1.9 0.2 0:00.04 top 4066 root 20 0 98.1m 4424 3416 S 1.0 0.9 0:01.38 sshd 1 root 20 0 19364 1536 1224 S 0.0 0.3 0:01.75 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 后续已省略...
top显示信息总结(以上个实验为例):
top - 09:51:04 up 3:41, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 1.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 494164k total, 326492k used, 167672k free, 30680k buffers Swap: 1015804k total, 0k used, 1015804k free, 122340k cached
第一行
top-09:51:04:当前时间
up 3:41:总共运行时长
load average:平均负载(后三数字分别表示过去5,10,15分钟的平均负载)
第二行
task:作业数总计
running:处于运行态的作业数
sleeping:处于睡眠态的作业数
stopped:处于停止态的作业数
zombie:处于僵死态的作业数
第三行
cpus:当前cpu占用率
sys:cpu用于内核空间进程的占用率
ni:cpu用于调整nice值所消耗的百分比
id:空闲百分比
wa:等待io所消耗百分比
hi:硬件中断所占用百分比
si:处理软中断所占用百分比
st:被虚拟化软件所占用的百分比
第四行
Mem:内存总量
#k userd:被使用的内存量
#k free:空闲量
#k 缓冲所使用内存量
第五行
Swap:swap交换分区总量,后续值和第四行一样,不再赘述
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:进程所属用户
PID:进程号
%CPU:cpu占用百分比
%MEM:内存占用百分比
VSZ:虚拟内存集
RSS:常驻内存集
TTY:启动进程的终端
STAT:进程状态
START:启动时间
TIME: 累积占用CPU时长
htop:和top功能类似,以更直观的方式显示和管理进程
常用用法:htop [dus]
选项含义:-d #:指定延时时长为#妙
-u USERNAME:指定只显示和USERNAME用户相关进程
-s COLUMN:指定排序的字段如PID USERNAME等
交互式命令:
u:-->接着选择用户,只显示指定用户的进程,
s:跟踪选定进程所发起的系统调用
l:列出选定进程所操作过的文件
t:显示进程的层级结构
a:可以选择把选定进程绑定于某CPU
P:使用CPU占用率作为排序关键字
M:使用内存占用率作为排序关键字
T:使用累积占用CPU时长作为排序关键字
F1:帮助
F2:设置相关参数
F3:查找,可指定关键字
F4:标记
F5:显示进程树
F6:排序依据,可指定排序关键字
F7、F8:降低和调高nice值
F9:向指定进程发信号,可指定所发信号
F10:退出
glances:交互式系统性能指标监控工具
用法:glances [OPTION]
选项:
-b:以Byte/s为单位,显示网卡设备数据交换数率
-d:不显示磁盘IO那块统计数据
-f /PATH/TO/FILE:设置输出文件的位置及格式
-o:{HTML|CSV}:设定文件的输出格式
-m:关闭mount功能模块
-n:关闭网络功能模块
-r:关闭进程列表功能模块
-t #:指定延时时长,默认为3秒
-1:单独显示每颗cpu的相关数据信息
glances还支持C/S模式工作
服务器模式配置
glances -s -B IPADDR
-B:用于指明监听的本地地址
客户端模式配置
glancess -c IPADDR
-c:用于连入的服务器地址
例5:配置glances使之工作于C/S架构下
1.配置Server端
[[email protected] yum.repos.d]# glances -s -B 189.172.5.105 Glances server is running on 189.172.5.105:61209
2.配置Client端
[[email protected] ~]# glances -c 189.172.5.105
系统信息统计工具dstat
dstat:全面整合命令vmstat,iostat netstat,nfsstat和ifstat综合显示系统信息
用法: dstat [-afv] [options..] [delay [count]]
选项
-c:显示cpu性能指标相关的统计数据
-d:显示disk相关的速率数据
-l:显示平均负载情况
-g:显示page相关的速率数据
-i(--int):中断相关的统计数率
-m:内存相关的统计数据
-n:网络相关的统计数据
-N 接口:只显示指定网卡接口的相关速率
-p:显示进程相关的统计数据
-r:指定io相关的
-s:显示swap的相关数据
-t:显示时间
-y:显示系统相关的数据,包括中断和进程切换
--top-cpu:显示最占用cpu的进程
--top-bio:显示最小号block io的进程
--top-cputime:显示最消耗cpu时长的
--top-io:显示最消耗io的进程
--top-mem:显示最占用内存的进程
--ipc:显示用于进程间通信的速率数据
--raw:显示raw套接字的相关数据
--tcp:显示tcp套接字的相关数据
--udp:显示udp相关的套接字数据
--unix:显示unix统计数据
--socket:显示上述从raw开始的信息
例6:显示当前系统cpu、磁盘、内存使用信息
[[email protected] ~]# dstat -c -m -d ----total-cpu-usage---- ------memory-usage----- -dsk/total- usr sys idl wai hiq siq| used buff cach free| read writ 0 1 99 0 0 0| 188M 35.1M 183M 76.2M| 12k 10k 0 0 100 0 0 0| 188M 35.1M 183M 76.2M| 0 0 0 0 100 0 0 0| 188M 35.1M 183M 76.2M| 0 0 0 0 100 0 0 0| 189M 35.1M 183M 76.0M| 0 0 1 1 98 0 0 0| 189M 35.1M 183M 76.0M| 0 0 ^C