Linux程序与进程
程序:一组指令及参数的集合,按照既定的逻辑控制计算及运行用来完成特定的任务。
进程:运行着的程序,操作系统的基本单位,动态的,有生命周期与运行状态。
程序与进程的区别:
1.程序是静态的,没有运行意义;进程是动态的,是程序运行的动态过程
2.进程具有并发行,而程序是封闭的
进程与线程的区别:
1.一个进程可以拥有多个线程,而一个线程只能被一个进程所拥有
2.线程不能单独执行,但每一个线程都有程序的入口,执行序列以及程序出口,它必须组成进程才能执行
父子进程:
父进程复制自己的地址空间创建一个新的进程,每个进程分配一个唯一的ID
Linux进程管理工具:
pstree: 显示进程树 pstree -p
ps : 显示当前系统进程的运行情况
ps -aux:
USER:进程的发起者
PID:进程号
%CPU:进程使用掉的cpu资源百分比
%MEM:进程所占用的物理内存百分比
VSZ:进程使用掉的虚拟的内存的大小 单位是Kb
RSS:进程占用的固定内存大小单位是Kb
TTY:指进程是在哪个终端运行
STAT:进程目前的状态(R:running运行状态;S:interruptible sleeping 可中断睡眠;D:uniterruptible sleeping 不可中断睡眠;zombie:僵死态)
pgrep :以名称为依据从运行进程队列中查找进程,并显示查找到的进程id
选项 | 意义 |
---|---|
-l | 显示进程号和进程名 |
-n | 当匹配多个进程时,显示进程号最小的进程 |
-o | 当匹配多个进程时,显示进程号最大的进程 |
uptime: 显示系统总共运行了多长时间和系统的平均负载
显示当前时间,系统已启动时间,当前上线人数,系统平均负载(1、5、10分钟,一般不超过1)
free:显示当前系统 未使用的内存空间,已使用的内存空间,内核使用的内存缓冲区
-b 以字节为单位
-m 以MB为单位
-g 以GB为单位
进程监控工具:
top:可以动态的持续监控进程的运行状态
第一行:
1.当前系统时间
2.系统已启动的时间
3.当前登录用户数
4.系统平均负载(1min、5min、15min),超过1表示负载过高
第二行:
当前进程的总量,以及处于各种状态的进程的数量,要注意最后的zombie,不为0
要及时查看哪个进程处于僵死状态
第三行:CPU的整体负载,多核CPU可按1切换不同CPU的负载率
us:user space 用户运行程序占用CPU百分比
sy:system 用于运行内核占用CPU百分比
ni:nice用户进程空间所改变过优先级的进程占用CPU百分比
id:idle 空闲CPU百分比
wa:wait to 等待I/O花费时间
hi:hardware interrupt 硬件中断占用CPU的百分比
si:software interrupt 软件中断占用CPU的百分比
st:stolen 被偷走的CPU百分比,一般为虚拟机占用
第四行:表示物理内存的使用情况
第五行:表示交换分区的使用情况
htop:top增强版进程监控工具
PID:进程标志号,是非零正整数
USER:进程所有者的用户名
PR:进程的优先级别
NI:进程的优先级别数值
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程使用的共享内存值
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称
vmstat:虚拟内存统计工具
通过top、htop我们可以获得一些进程对系统资源的使用情况,而vmstat则可以通过内存、磁盘、网络、CPU来动态显示系统资源的使用情况。
-s 显示内存的统计数据
-d 显示磁盘的统计数据
vmstat输出含义:
procs:
r:可运行进程的个数,和核心数有关
b:处于不可终端睡眠状态
memory:
swpd:交换内存的使用总量
free:空闲物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存总量
swap:
si:从磁盘交换进内存的数据速率(kb/s)
so:从内存交换至磁盘的数据速率(kb/s)
io:
bi:从块设备读入数据到系统的速率(kb/s)
bo:保存数据至块设备的速率(kb/s)
system:
in:interrupts 中断速率,包括时钟
cs:进程切换速率
cpu:
us:user space 用户运行程序占用CPU百分比
sy:system 用于运行内核占用CPU百分比
id:idle 空闲CPU百分比
wa:wait to 等待I/O花费时间
st:stolen 被偷走的CPU百分比,一般为虚拟机占用
lsof:是一个列出当前系统打开文件的工具
[root@192 ~]# lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root txt REG 8,2 150352 134610 /sbin/init
init 1 root mem REG 8,2 66432 133698 /lib64/libnss_files-2.12.so
init 1 root mem REG 8,2 1924768 133682 /lib64/libc-2.12.so
init 1 root mem REG 8,2 90912 143162 /lib64/libgcc_s-4.4.7-20120601.so.1
init 1 root mem REG 8,2 44472 133710 /lib64/librt-2.12.so
init 1 root mem REG 8,2 143280 133706 /lib64/libpthread-2.
......
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。
lsof输出各列信息的意义如下:
1、COMMAND:进程的名称
2、PID:进程标识符
3、USER:进程所有者
4、FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
5、TYPE:文件类型,如DIR、REG等
6、DEVICE:指定磁盘的名称
7、SIZE:文件的大小
8、NODE:索引节点(文件在磁盘上的标识)
9、NAME:打开文件的确切名称