写在前面:
博客书写牢记5W1H法则:What,Why,When,Where,Who,How。
本篇主要内容:
● 基础概念介绍
进程优先级
进程状态
● 进程查看与管理命令
pstree
ps
pgrep/pkill
pidof
top
htop
vmstat
pmap
glances
dstat
kill
killall
● linux作业控制
nice
renice
● 网络客户端工具
ping
hping
traceroute
ftp
lftp
lftpget
wget
基础概念介绍:
进程(Process):
运行中的程序的副本。进程存在生命周期。
线程:
轻量级的进程。当一个进程中存在可同时执行的不同部分时,开发人员可以将这个进程拆分为多个线程,线程可同时运行在不同的CPU核心上,但同一个cpu不会将隶属于同一进程的不同线程当做不同程序分配更多时间片,所以当线程数超过了CPU核心数,线程就没有了存在的意义。对linux而言,线程与进程的概念比较模糊。
tase struck:
linux内核中用来存储进程信息的固定数据结构
task list:
多个任务的task struck组件链表
进程的创建:
linux在开机的时候,由内核调用init程序创建系统上的第一个进程(PID为1),此进程调用其他服务、建立进程来启动其他服务,此进程将在系统运行的整个过程中一直存在。
这些在系统引导过程中启动的进程叫做守护进程,他们的运行与终端无关。而其他跟终端相关,通过终端启动的进程,叫做前台进程。当然,我们也可以将前台进程放入后台,以守护进程的模式运行。
只有init进程能够直接与内核沟通,其他进程必须借助init进程间接的与内核沟通。
在不同版本的linux中,产生此进程的软件也不同。
centos5.x:SystemV;
centos6.x:upstart
centos7.x:systemd
进程优先级:
为了防止某些不太重要的进程过多的占用cpu资源,linux内核支持进程优先级设置,进程优先级越高,在cpu轮训过程中,越容易被cpu执行。
范围:0-139
1-99:为实时优先级,不能够手动指定这个范围的值;
100-139:可通过nice/renice等命令来调节
nice:
范围:-20到19,对应进程优先级的100-139。
普通用户只能够调大进程优先级,使进程更少的被cpu执行。
进程的内存占用:
内核通过将内存分割成页框(Page Frame),为进程模拟出内存空间,使进程觉得自己是系统上唯一一个进程,可以使用除内核占用之外的所有内存空间。而进程实际占用的进程空间很可能是内存上不连续的页框。
进程中的部分数据(如指令等信息)必须常驻内存中,这样占用的内存空间称为常驻内存集(RSS);而其他进程调用的数据/共享数据等信息可以放入swap中,这些被称为虚拟内存集(VSZ)。
进程间通讯(IPC)Inter Process Communication:
既然内核给进程模拟出内存空间,让其觉得自己是唯一一个进程,那么进程之间如何通讯呢?
其实进程之间可以通过多种方式彼此通讯:
同一主机:
1.发送信号signal
2.共享内存中通讯shm(shared memory)
3.semerphor
不同主机:
rpc:remote procecure call(远程程序调用)
socket:通过socket文件,结合网络协议进行
Linux内核多任务模式:
抢占式多任务。
进程状态:
运行态:Running
可中断睡眠:interruptable sleeping
不可中断睡眠:uninterruptable sleeping
停止态:Stop 暂停在内存中,不会被cpu调用,除非手动启动。
僵死态:zombie
进程分类:
进程根据占用cpu与I/O的频率,可以分为以下两类:
CPU-Bound:cpu限制型。需要大量占用CPU的进程,如算法进程。
IO-Bound:I/O限制型。频繁使用I/O的进程,如记事本。
linux系统进程查看及管理命令:
pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup, nice, renice, killall, ...
pstree
display a tree of processes
ps
report a snapshot of the current processes.
ps可以使用3种风格的参数:
UNIX:包含一个"-"
BSD:不能包含任何"-"
GUN:包含"--"
常用组合:
(1)ps aux #BSD风格显示系统上所有进程,并以用户为中心组织进程状态信息
a:所有与用户有关的进程
x:所有与用户无关的进程
u:以用户为中心组织进程状态
输出含义:
USER:进程用户
PID:进程号
%CPU:cpu占用百分比
%MEM:内存占用百分比
VSZ:虚拟内存集
RSS:常驻内存集
TTY:终端
?:与终端无关
STAT:状态
R:Runninig
S:interruptable sleeping 可中断睡眠
D:uninterruptable sleeping 不可中断睡眠
T:stopped
Z:zombie
+:前台进程
s:session leader 进程引导者,引导启动其他进程
l:多线程进程
<:高优先级
N:低优先级
START:进程何时发起的
TIME:进程占用的CPU时间统计
COMMAND:发起进程的命令
(2)ps -ef[H],-eF[H] #UNIX风格显示系统上所有进程
-e:显示所有进程;
-f:显示完整格式的进程信息
-F:显示更加完整格式进程信息
-H:以层级结构显示进程命令(CMD)信息
(3)ps -eo,axo field1,filed2
o field... :自定义显示字段,以","分隔
pgrep/pkill
look up/signal processes based on name and other attributes
pgrep [options] PATTERN
这里的PATTERN匹配的是进程名中的部分字段
-u, --euid euid,...:匹配有效用户
-U, --uid uid,...:匹配真实用户
-t, --terminal term,..:匹配终端
-l, --list-name:显示用户名信息
-a, --list-full:显示进程的完整信息
-P, --parent ppid,...:显示指定进程号的子进程
pidof
find the process ID of a running program.
与pgrep类似,但必须给出完整的进程名
top
display Linux processes
top [OPTIONS]
-d DELAY-TIME:Delay-time,指定刷新时间,单位为秒
-b:以批次的方式显示。
-n NUM:与-b一起使用,指定多少批次
常用按键:
排序;
P:按%CPU列排序
M:按%MEM列排序
T:按TIME+列排序
首部信息显示与隐藏:
l:top行
t:Task和%Cpu(s)行
m:Mem与Swap行
1:(数字1)%Cpu(s)行显示单个cpu信息
其他:
s|d:指定刷新间隔,默认为3秒
k:kill,给进程发信号
q:退出
e:以不同单位显示VIRT、RES、SHR信息,默认单位为Kb
输出含义:
第一行的信息的load average表示cpu的队列长度,通常,这个值不超过cpu核心数则表示cpu负载正常。
%Cpu:
us:用户空间
sy:系统空间,即内核空间
ni:nice
id:空闲时间
wa:I/O等待
hi:处理硬件中断
si:处理软件中断
st:被偷走的时间
cs:上下文切换,即进程切换
内存:
VSZ:(Virtual memory SiZe)虚拟内存集(进程以为自己占用的内存空间)
RSS:(Resident Size)常驻内存集
SHM:共享内存集
htop
光盘里没有安装包,需要使用fedora的源进行安装。
-d --delay=DELA:指定延时时间间隔
-u --user=USERNAME:只显示指定用户进程
-s --sort-key COLUMN:按指定字段排序
常用按键:
与top大致相同,但多了几个按键
l:显示选定进程打开的文件列表
s:跟踪选定进程的系统调用
t:以层级关系显示个进程状态
a:将选定进程绑定到某指定CPU核心
vmstat
Report virtual memory statistics
vmstat [options] [delay [count]]
-s, --stats:显示内存使用详细
输出含义:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 599692 1500 230960 0 0 8 1 22 37 0 0 100 0 0
procs:
r:等待运行的进程个数,cpu上等待运行的队列长度
b:处于不可中断睡眠的进程个数;被阻塞的任务队列长度
memory:
swapd:交换内存使用总量
free:空闲物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存总量
swap:
si:swap in,进入swap分区的速率(kb/s)
so:swap out,离开swap分区的速录(kb/s)
io:
bi:block in,从块设备读入数据到系统的速率(kb/s)
bo:block out,写入到块设备的速率(kb/s)
system:
in:interrupts,中断速率
cs:context switch,上下文切换速率,即进程切换速率
cpu:
us:user space,用户空间使用率
sy:system,系统空间使用率
id:idle,空闲
wa:wait,I/O等待
st:stolen,虚拟化技术被偷走的时间
pmap
report memory map of a process
根据/proc/PID/maps文件内容输出进程占用内存的地址
-x, --extended:显示附加格式的信息
glances
A cross-platform curses-based monitoring tool
需要自行安装,可远程管控其他主机
常用选项:
-b:以Byte为单位显示网上数据速率;
-d:关闭磁盘I/O模块;
-m:关闭mount模块;
-n:关闭network模块;
-t #:刷新时间间隔;
-1:每个cpu的相关数据单独显示;
-o {HTML|CSV}:输出格式;
-f /PATH/TO/SOMEDIR:设定输出文件的位置;
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR:本机的某地址,用于监听;
客户端模式:
glances -c IPADDR
IPADDR:是远程服务器的地址;
dstat
versatile tool for generating system resource statistics
需要自行安装,功能强大
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,...,total
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
--tcp
--udp
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程;
--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-lantency:延迟最大的进程;
kill
terminate a process
向进程发送信号,以实现对进程的管理
显示系统可用信号:
kill -l [signal]
向进程发信号:
信号标识方法:
(1)信号数字标识;
(2)信号完整名称;
(3)信号简写名称
向进程发信号:
kill [-s signal|-SIGNAL] pid...
常用信号:
1) SIGHUP:无须关闭进程而让其重读配置文件;
2)SIGINT:终止正在运行的进程,相当于Ctrl+c
9)SIGKILL:杀死运行中的进程;
15)SIGTERM:终止运行中的进程;
18)SIGCONT:
19)SIGSTOP:
补充:kill %# 用来给jobs发信号
killall
kill processes by name
killall [-SIGNAL] name
Linux作业控制:
前台作业(foregroud):
通过终端启动,且启动后一直占用终端;
后台作业(backgroud):
可以通过终端启动,启动后即转入后台运行(不占用终端)
将作业置于后台:
(1)运行中的作业按ctrl+z
注意:作业送到后台会转为停止状态
(2)尚未运行的作业
在命令后添加&
注意:此类作业虽然被送往后台,但依旧与终端有关,当终端停止时,作业也会一起中断。当有输出时,也会默认输出到本终端。
查看作业命令:
jobs
实现作业控制命令:
fg [%[JOB_NUM]] 将指定作业号的作业调回前台
bg [%[JOB_NUM]] 通知指定作业号的后台作业继续运行
kill [%[JOB_NUM]] 终止指定作业
进程优先级:
可通过nice值调整的优先级范围:100-139
分别对应nice值:-20到19
进行运行时,默认优先级为120,对应nice值为0
nice
以指定nice值运行命令
nice [OPTIONS] [COMMAND [ARGS]...]
-n NICE:指定nice值
注意:只有管理员可以调低nice值,普通用户只能调高
renice
修改运行中的进程的nice值
renice [-n] NICE PID
网络客户端工具:
ping
会向目标主机发送ICMP协议包,目标注意也会回送相同大小的包
ping [OPTION] destination
-c #:发送的ping包个数;
-w #:ping命令超时时长;
-W #:一次ping操作中,等待对方响应的超时时长;
-s #:指明ping包报文大小;
hping3
向目标主机发送TCP/IP数据包,用来进行测试
--fast:快速发送数据包
--faster:更快发送数据包
--flood:能多快就多快的发送数据包
-i uX:发送数据包时间间隔
traceroute
跟踪源主机到目标主机之间经过的网关
ftp
ftp: File Transfer Protocol
ftp服务命令行客户端工具;
lftp
lftp [-p port] [-u user[,pass]] [site]
get, mget
put, mput
rm, mrm
lftpget
lftpget [-c] [-d] [-v] URL [URL...]
-c:继续此前的下载;
wget
The non-interactive network downloader.
wget [option]... [URL]...
-b:在后台执行下载操作;
-q:静默模式,不显示下载进度;
-O file:下载的文件的保存位置;
-c:续传;
--limit-rate=amount:以指定的速率传输文件;