进程状态
Linux 内核:抢占式多任务
进程类型
守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程。
前台进程:跟终端相关,通过终端启动的进程
注意:两者可相互转化
进程状态
- 运行态:running
- 就绪态:ready
- 睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵尸态:zombie,结束进程,父进程结束前,子进程不关闭
僵尸进程
一个子进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收。
孤儿进程
一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
=====僵尸进程将会导致资源浪费,而孤儿进程则不会。====
进程的分类
CPU-Bound:CPU密集型,非交互
在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下的程序,在执行的过程当中 绝大部份时间用在三角函数和开根号的计算,便是属于CPU bound的程序。
IO-Bound:IO密集型,交互
I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高。
Linux系统状态的查看及管理工具
pstree ps pidof pgrep top htop glance pmap vmstat dstat kill pkill job bg fg nohup
进程相关
pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-Z] [-A|-G|-U] [pid|user]
参数说明
-a:显示出该命令的参数,假如这个命令进程被其他进程替换掉,那么进程将显示在括号中-a选项包含有压实进程树的选项,对于相同的进程,会使用n*(process)的形成展现出来
-c:关闭禁用显示结果进程树,在默认情况下,进程树是会被压缩的。不管有多少进程名相同的进程,都会逐个显示出来。
-G:使用vt100线性描述树
-h:突空出显示当前进程的父进程并高亮显示出来,如果没有父进程那么什么都不会显示。
-H:突出显示出指定进程的父进程信息并高亮显示出来,使用方法为pstree -H PID
-l:显示长格式命令选项,在默认的情况下,命令行最多显示宽度为132bit,超过将不能正常显示。
-n:基于进程相同的祖先来进行排序,可以命名pid来代替进程名称。
-p:显示所有的时程,显示结果包含进程名和时进程ID
-u:显示出用户的UID,无论何时,这个UID和进程比较UID参数,这个新的UID将在进程名后显示不同的参数。
-U:使用utf-8字符集以十进制表示
pstree -pc
ps默认显示当前终端中的进程
参数:说明
a:选项包括所有终端中的进程
x:选项包括不连接终端的进程
u:选项显示进程所有者的信息
f:选项显示进程的父进程
o:属性...选项显示定制的信息:pid、comm、%cpu、%mem、state、tty、euser、ruser
字段含义
字段:含义
VSZ:Virtual memory SiZe,虚拟内存集,线性内存
RSS:ReSident Size,常驻内存集
ni:nice值
pri:priority 优先级
psr:processor CPU编号
rtprio:实时优先级
STAT进程状态
字段:含义
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程
l:多线程进程
L:内存 分页并带锁
N:低优先级进程
<:高优先级进程
s:session leader
常用组合
- -ef
-e:显示所有进程
-f:显示完整格式的程序信息
--eFH
-F:显示完整格式的进程信息
-H:以进程层级格式显示进程相关信息
进程优先级调整
静态优先级:100-139
进程默认启动时的nice 值为0,优先级为120
只有根用户才能降低nice值(提高优先性)
nice [OPTION] [COMMAND [ARG]...]
执行时指定
nice -n -5 /usr/local/mysql/bin/mysqld_safe &
renice [-n] priority pid...
renice -n 2 -p 3432
-n后面是优先级的值;-p是进程号
top命令。输入r,然后根据提示输入进程ID,再输入优先级数值。
查看:
ps axo pid comm ni
例1
[root@localhost ~]# ps -e #显示所有进程
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:00 migration/0
3 ? 00:00:00 ksoftirqd/0
。。。。。。。。。省略。。。。。。。。。。。。。。
[root@localhost ~]# ps aux #不区分终端,显示所有用户的所有进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 4535 0.0 0.5 64340 11208 ? S 18:59 0:00 /usr/libexec/notification-daemon
root 4538 2.8 0.4 51116 8712 pts/2 SL+ 18:59 0:44 mplayer /mnt/usb/music/20080625211631.mp3 /mnt/usb/music/46250194.mp3 /mnt
。。。。。。。。。省略。。。。。。。。。。。。。。
[root@localhost ~]# ps -ef #显示所有进程的UID,PPIP,C与STIME栏位
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 18:24 ? 00:00:00 init [3]
root 2 1 0 18:24 ? 00:00:00 [migration/0]
root 3 1 0 18:24 ? 00:00:00 [ksoftirqd/0]
。。。。。。。。。省略。。。。。。。。。。。。。。
[root@localhost ~]# ps -u zhangy #显示zhangy用户的所有进程
PID TTY TIME CMD
3804 ? 00:00:00 httpd
3805 ? 00:00:00 httpd
3806 ? 00:00:00 httpd
。。。。。。。。。省略。。。。。。。。。。。。。。
搜索进程
最灵活:ps 选项 | 其他命令
按预定义的模式:pgrep
pgrep [options] pattern
参数|含义
-u uid|effective user ,生效者
-U uid|real user ,真正发起运行命令者
-t terminal| 与指定终端相关的进程
-l| 显示进程名
-a| 显示完整格式的进程 名
-P pid| 显示指定进程的子进程
- tty
- pgrep -lt pts/0 显示pts/0终端的进程名和pid
- pgrep -lu root 显示root用户的相关进程
按确切的程序名称:/sbin/pidof
pidof bash
按确切的端口:lsof
- lsof -i:80 查看tcp或udp为80的端口( netstat -lnp |grep 80)
- lsof -u username 显示所属user进程打开的文件
- lsof -g gid 显示归属gid的进程情况
- lsof +d /DIR/ 显示目录下被进程打开的文件
- lsof filename 显示打开指定文件的所有进程
- lsof -i -U //显示所有打开的端口和UNIXdomain文件
- lsof -i@192.168.1.91 查看指定网口有哪些进程在使用
uptime显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)
系统平均负载:
指在特定时间间隔内运行队列中的平均进程数
- ==通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么 此主机的性能有严重问题==
- 如果linux 主机是1 个双核CPU,当Load Average为6的时候说明机器已经被充分使用
- uptime
- 00:48:13 up 8:02, 2 users, load average: 0.00, 0.01, 0.05
- 00:48:13 up指开机时间
- 8:02指系统运行了8分零2秒
- 2 users表示当前有两个终端登录,至少有一个tty1
- oad average: 0.00, 0.01, 0.05指1,5,10分钟内的平均负载
top 【-dupnb】
-b |批处理
-c| 显示完整的命令
-I |忽略失效过程
-s |保密模式
-S |累积模式
-i<时间> |设置间隔时间
-d <时间>|默认3s
-u<用户名>| 指定用户名
-p<进程号> |指定进程
-n<次数> |循环显示的次数
头部栏位信息简介
us |用户空间
sy |内核空间
ni |改变过优先级的进程占用CPU的百分比
id |空闲CPU百分比
wa |IO等待占用CPU的百分比
hi |硬中断 通过鼠标,硬盘数据移动等操作发送中断信号
si |软中断(模式切换)软件对cpu的操作,比如进程之间的切换
st|虚拟机偷走的时间
TOP交互命令
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s选项,其中一些命令可能会被屏蔽。 h:显示帮助画面,给出一些简短的命令总结说明 M:根据驻留内存大小进行排序 P:根据CPU使用百分比大小进行排序 T:根据时间/累计时间进行排序 k:终止一个进程 i:忽略闲置和僵死进程。这是一个开关式命令 q:退出程序 r:重新安排一个进程的优先级别 S:切换到累计模式 s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5s f或者F:从当前显示中添加或者删除项目 o或者O:改变显示项目的顺序 l:切换显示平均负载和启动时间信息 m:切换显示内存信息 t:切换显示进程的CPU状态信息 c:切换显示命令名称和完整命令行 W:将当前设置写入~/.toprc文件中 内存相关
vmstat [options] [delay[count]]
vmstat 2 5 每2s刷新,一次刷新5次 -s 显示内存的统计数据 iostat统计CPU和设备IO信息(每个磁盘读写速率统计)
iostat 1 10 1s刷一次刷新10次停止