一、Linux进程概念
1.进程:Process,是运行中的程序的一个副本,有生命周期,都由其父进程创建
Linux内核存储进程信息的固定格式:taskstruct
多个任务的的taskstruct组件的链表:task list
2.进程优先级:0-139
0:一般不使用
1-99:实时优先级;数字越大优先级越高,系统自动安排
100-139:静态优先级;数字越小优先级越高,可手动更改
3.Nice值:-20至19,对应于100到139
普通用户只能将自己的优先级调低,root用户可以随意调制
每个队列有两对:运行队列、过期队列,140对280队,通过CPU中断控制来给进程运行时间
4.进程内存
内存是以Page Frame:页框的方式存储页面数据
每个内存页框的MMU(Memory Management Unit,内存管理单元)的大小一般为4k
进程在内存上的存储单元可能是不连续的
5.IPC:Inter Process Communication进程间通信
同一主机上:signal信号、shm: shared memory共享内存、semerphor旗语手势
不同主机上:rpc: remote procecure call远程过程调用、socket套接字
6.进程类型
守护进程:在系统引导过程中启动的进程,跟终端无关的进程;
前台(用户)进程:跟终端相关,通过终端启动的进程
注意:也可把在前台启动的进程送往后台,以守护模式运行;
7.进程状态
运行态:running,进程占用CPU,并在CPU上运行;
就绪态:ready,进程已经具备运行条件,但是CPU还没有分配过来;
可中断睡眠态:处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。
不可中断睡眠:进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。但是有延迟
可中断:interruptable
不可中断:uninterruptable,不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。
停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped
僵死态:zombie,结束进程,父进程结束前,子进程不关,不可被kill, 即不响应任务信号, 无法用SIGKILL杀死
8.进程的分类
CPU-Bound:cpu密集型,对CPU占用大,非交互式的占用大
IO-Bound:io密集型,对io占用大,交互式的占用大
9.进程的数字标识16bits:
0-65535:有效使用1-65535
1-1023:固定分配,服务器使用,而且只有管理员有权限启用;
1024-4W:半固定,服务,如mysql等
4W+:临时;标识临时通信进程
10.CentOS 5/6/7的启动进程
CentOS 5: SysV init,在系统启动和创建进程借助脚本,串行启动,速度慢
CentOS 6:upstart,在5的基础上升级,同为脚本启动,但时可以支持并行启动
CentOS 7:systemd,并行,以systemd为单一进程同时启动其他进程
二、进程管理相关命令
1.pstree:进程树查看
常用选项:
-p:打印个进程的pid
实例:
[[email protected] ~]# pstree -p systemd(1)─┬─abrt-watch-log(791) ├─abrt-watch-log(799) ├─abrtd(788) ├─alsactl(785) ├─at-spi-bus-laun(88842)─┬─dbus-daemon(88859) │ ├─{at-spi-bus-laun}(88846) │ ├─{at-spi-bus-laun}(88852) │ └─{at-spi-bus-laun}(88865) ├─at-spi2-registr(88871)───{at-spi2-registr}(88873) ...
2.ps:process state,查看当前进程状态
Linux各进程的相关信息在/proc目录有一个以其PID命令的目录下的众多文件中.
常用选项:
a:所有与终端相关的进程; x:所有与终端无关的进程; u:以用户为中心组织进程状态信息显示 -e:显示所有进程 -f:显示完整格式的进程信息 -F:显示完整格式的进程信息; -H:以层级(树状)结构显示进程的相关信息; o field1, field2,...:自定义要显示的字段列表,以逗号分隔;
实例:
1) # ps aux:显示所有与终端有无关联的进程信息,一用户为中心组织状态信息显示
[[email protected] ~]# ps aux | head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 128892 8792 ? Ss Feb06 3:34 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S Feb06 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Feb06 0:14 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S Feb06 0:00 [migration/0]
说明:
USER:运行该进程的用户
PID:进程的ID号码
%CPU:CPU的占用百分比
%MEM:内存空间占用比率,占用整个内存空间的比例
VSZ(Virutal memory SiZe):虚拟内存集;占用的虚拟内存大小,真正用来占用的内存
每个内存占用的内存有两种:线性内存空间、物理内存空间
- 线性内存:会映射到物理内存,在线性内存空间角度看是连续的内存占用
- 物理内存:实际上是以内存页框保存,可能一个进程占用的不连续的页框
RSS:ResidentSize,常驻内存集;坚决不能转换到swap中内存集
TTY:运行终端
STAT:当前进程的运行状态,BSD样式
- R:running,运行态
- S:interruptable sleeping,可中断睡眠
- D:uninterruptable sleeping,不可中断睡眠
- T:Stopped,停止状态
- Z:zombie,僵死状态,进程结束后,在被回收之前状态
- +:表示一个前台进程,占据命令提示符
- l:多线程进程
- N:低优先级进程
- <:高优先级进程
- s:session leader ,回话主导进程,如shell,其主导其下的进程
START:进程开始时间
TIME:累计运行CPU时间
COMMAND:使用进程、线程,[]: 内核线程
2) # ps -ef:以完整格式显示所有的进程信息
[[email protected] ~]# ps -ef|head -5 UID PID PPID C STIME TTY TIME CMD root 1 0 0 Feb06 ? 00:03:35 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0 0 Feb06 ? 00:00:00 [kthreadd] root 3 2 0 Feb06 ? 00:00:14 [ksoftirqd/0] root 7 2 0 Feb06 ? 00:00:00 [migration/0]
说明:
- UID:启动进程用户
- PID:运行进程号
- PPID:父进程的进程号,0在内核启动init之前存在,init启动后终止,存在过渡,一般为swap的进程
- C:cpu utilization,CPU的占用百分比
- STIME:启动时间
- TTY:与其终端相关
- TIME:累计运行CPU时间
- CMD:启动此进程的命令
3) # ps -eFH:树状层级结构显示
F比f显示的信息更加全面,层级结构显示,缩进相同同层级
PSR:运行在哪颗CPU上,十进制编号,0/1/2/3
[[email protected] ~]# ps -eFH|head -5 UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 2 0 0 0 0 0 Feb06 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 Feb06 ? 00:00:14 [ksoftirqd/0] root 7 2 0 0 0 0 Feb06 ? 00:00:00 [migration/0] root 8 2 0 0 0 0 Feb06 ? 00:00:00 [rcu_bh]
4) # ps -eo , #ps axo显示自定义字段列表
o field1, field2,...:自定义要显示的字段列表,以逗号分隔,o要写在后面,因为要带参数
常用的field:pid,ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
- ni:nice值;
- priority:priority,优先级;
- rtprio:realtime priority,实时优先级;
[[email protected] ~]# ps axo pid,ni,pri,psr|head -5 PID NI PRI PSR 1 0 19 0 2 0 19 0 3 0 19 0 7 - 139 0 [[email protected] ~]# ps -eo pid,ni,pri|head -5 PID NI PRI 1 0 19 2 0 19 3 0 19 7 - 139
3.pgrep命令
用法:
pgrep [OPTIONS] [PATTERN]
注:PATTERN: 支持正则表达元字符书写模式实现进程过滤;
常用选项:
-U UID:仅显示由指定用户身份运行的进程PID -G GID:仅显示以指定组身份运行的进程PID -t term: 仅显示指定的终端设备的进程PID -l: 显示进程PID的同时显示进程名 -a: 显示完整格式的进程名 -u uid: effective user,生效者 -P pid: 显示指定进程的子进程
实例:
1)显示以root身份运行的进程的PID
[[email protected] ~]# pgrep -U root|head -5 1 2 3 7 8
2)显示以root组身份运行的进程的PID
[[email protected] ~]# pgrep -G root|head -5 1 2 3 7 8
3)显示以tty1终端运行的进程PID
[[email protected] ~]# pgrep -t tty1 88406 88472 88494 88495
4)显示以root身份运行,root组运行,且终端为tty1进程的PID与进程名
[[email protected] ~]# pgrep -U root -G root -t tty1 -l 88406 bash 88472 startx 88494 xinit 88495 X
5)使用正则表达式做模式匹配
[[email protected] ~]# pgrep "\<bash\>" -l 19320 bash 88406 bash 125591 bash
4.pidof:根据进程名获取其PID;
格式:
pidof PROGRAM
实例:
[[email protected] ~]# pidof bash 125591 88406 81122 19320
5.top:display Linuxprocesses,动态显示进程信息
格式:
top [OPTION]
常用选项:
-d #:指定刷新时间间隔,默认为3秒; -b:以批次方式显示; -n #:显示多少批次; -p PID:通过指定监控进程ID来仅仅监控某个进程的状态。 -c:显示整个命令行而不只是显示命令名 -i: 使top不显示任何闲置或者僵死进程
常用交互式命令:
(1)在top显示过程中通过交互式命令指定排序(默认CPU):
- P: 按照CPU百分比大小将进程降序排序
- M:Memory占用量大小将进程降序排序
- T:CPU累积时间占用量将进程降序排序
(2)首部信息关闭
- l: top行信息是否显示;
- t:是否显示进程及CPU相关的信息
- 1:是否单独显示每颗CPU的使用率
- m: 是否显示内存及swap相关的信息
(3)其他命令
- q: 退出top
- s: 修改刷新时间间隔;
- k: 杀死指定进程
- L:搜索字符串
说明:
load avg:
CPU上等待运行的进程队列的队列长度; 过去1分钟、5分钟、15分钟的平均长度;
cpu(s)行解释:
us: user space,用户空间占用CPU百分比 sy: system,内核空间占用CPU百分比 ni: nice,用户进程空间内改变过优先级的进程占用CPU百分比 id: idle,空闲CPU百分比 wa: waiting io,等待输入输出的CPU时间百分比 hi: hardware interrupt,硬件CPU中断占用百分比 si: software interrupt,软件CPU中断占用百分比 st: stolen,虚拟机占用百分比
默认上,top显示这些关于进程的属性:
PID
进程ID,进程的唯一标识符
USER
进程所有者的实际用户名。
PR
进程的调度优先级。这个字段的一些值是‘rt‘。这意味这这些进程运行在实时态。
NI
进程的nice值(优先级)。越小的值意味着越高的优先级。
VIRT
进程使用的虚拟内存。
RES
驻留内存大小。驻留内存是任务使用的非交换物理内存大小。
SHR
SHR是进程使用的共享内存。
S
这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。 R – 运行态 S – 睡眠态 T – 被跟踪或已停止 Z – 僵尸态
%CPU
自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM
进程使用的可用物理内存百分比。
TIME+
任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND
运行进程所使用的命令。
还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。
实例:
[[email protected] ~]# top top - 01:21:28 up 9 days, 19:36, 3 users, load average: 0.07, 0.08, 0.06 Tasks: 419 total, 2 running, 417 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.6 us, 1.9 sy, 0.0 ni, 96.4 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 3098484 total, 281664 free, 566888 used, 2249932 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 2393584 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6851 root 20 0 0 0 0 S 6.2 0.0 0:07.28 kworker/0:1 84869 root 20 0 146412 2240 1368 R 6.2 0.1 0:00.01 top 1 root 20 0 128996 8856 1712 S 0.0 0.3 3:37.38 systemd # top //每隔3秒显式所有进程的资源占用情况 # top -d 2 //每隔2秒显式所有进程的资源占用情况 # top -c //每隔3秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名) # top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况 # top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
更加详细内容: http://www.cnblogs.com/qiwenhui/articles/4262044.html
注:VIRT=SWAP+RES
6.htop命令
需要安装(第三方安装包):
[[email protected]~]# yum install -y htop
(1)常用选项:
-d #:指定延迟时间间隔; -u UserName:仅显示指定用户的进程; -s COLUME:以指定字段进行排序;
(2)常用交互式命令:
l:显示选定的进程打开的文件列表; s:跟踪选定的进程的系统调用; t:以层级关系显示各进程状态; u: 仅显示指定用户的进程 k:发送信号,15通常用来杀死命令,15不起作用可用用9信号 #:快速定位到PID为#的进程上
(3)显示描述
左上方数据:表示每颗CPU、内存、交换内存的使用率
右上方数据:
- Tasks:当前的任务数量,用户空间进程
- thr:线程数量
- running:运行的数量
- Load average :过去一分钟、五分钟、十五分钟的平均负载
(4)支持鼠标操作的文本窗口
h命令获取帮助
(5)获取支持排序字段
[[email protected] ~]# htop --sort-key=help PID Command STATE PPID PGRP SESSION TTY_NR TPGID FLAGS