什么是进程?
一般来说,进程是已启动并且可执行程序的运行实例,简单地说,进程就是一个正在运行的程序。
程序(program): 通常是二进制文件,为实体文件
进程(process): 是程序运行的过程, 动态,有生命周期及运行状态
进程的生命周期
由当前进程(父进程)克隆(fork)创建一个子进程,此时父进程调用waitpid函数开始监控父进程和子进程(wait),父进程不会消亡只是进入休眠状态,子进程开始运行(exec)。当子进程结束运行后(exit)将退出状态告知系统,在退出时,子进程已经关闭并丢弃其资源环境,剩下的部分成为僵停(或僵尸进程,Zombie),然后系统将子进程退出状态事件返回给父进程,父进程在子进程退出后被唤醒,清理剩余结构,此时内核就会从内存中释放已经结束的子进程PCB(Processing Control Block进程控制块)。
进程的状态
name | decription |
---|---|
R运行状态(runing) | 进程不一定在运行中,也可以在运行队列里 |
S睡眠状态(sleeping) | 进程在等待事件完成(浅度睡眠,可以被唤醒) |
D磁盘睡眠状态(Disk sleep) | 不可中断睡眠(深度睡眠,不可以被唤醒,通常在磁盘写入时发生) |
T停止状态(stopped) | 可以通过发送SIGSTOP信号给进程来停止进程,可以发送SIGCONT信号让进程继续运行 |
X死亡状态(dead) | 该状态是返回状态,在任务列表中看不到 |
Z僵尸状态(zombie) | 子进程退出,父进程还在运行,但是父进程没有读到子进程的退出状态,子进程进入僵尸状态 |
T追踪或暂停状态 | 1、进程收到SIGSTOP信号,就会响应信号而进入TASK_STOPPED ,除非本身处于D。 再收到一个SIGCONT信号,就能恢复到TASK_RUNNING状态。2、TASK_TRACED进程被跟踪时的状态, 它会停下来,等待跟踪它的进程对其操作 |
查看进程
静态查看进程命令:ps
ps命令用于显示当前进程 (process) 的状态
常用参数:
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
aux 输出格式 :
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 127916 6488 ? Ss 18:58 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 18:58 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 18:58 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 18:58 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 18:58 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 18:58 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 18:58 0:00 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 18:58 0:00 [lru-add-drain]
USER:运行进程的用户
PID:进程ID
%CPU:cpu占用率
%MEM:内存占用率
VSZ:占用虚拟内存
RSS:占用实际内存(驻留内存)
TTY:运行程序的终端
STAT:状态字符
- D 无法中断的休眠状态(通常 IO 的进程);
- R 正在执行中;
- S 处于休眠状态;
- T 停止或被追踪;
- W 进入内存交换(从内核2.6开始无效)
- X 死掉的进程(从来没见过);
- Z 僵尸进程;
- < 优先级高的进程;
- N 优先级较低的进程;
- L 有些页被锁进内存;
- s 进程的领导者(父进程);
- l 多进程的(克隆进程);
- +位于后台的的进程组;
START:进程启动时间
TIME:进程执行时间(该进程实际使用CPU运行的时间)
COMMAND:进程名称
动态查看进程命令:top
top命令用于实时显示 process 的动态
-d : 改变显示的更新速度
-q : 没有任何延迟的显示速度
-n : 更新的次数,完成后将会退出 top
top - 18:32:45 up 230 days, 2:01, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.8%us, 0.5%sy, 0.0%ni, 98.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st
Mem: 3974188k total, 2811108k used, 1163080k free, 144292k buffers
Swap: 2097148k total, 46184k used, 2050964k free, 595092k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4478 root 20 0 3760m 669m 7808 S 1.3 17.2 195:53.36 java
7488 root 20 0 4799m 1.0g 13m S 1.0 26.0 30:55.04 java
25690 root 20 0 3428m 95m 5104 S 0.7 2.5 2156:22 java
24582 bo.wang 20 0 15024 1304 1004 R 0.3 0.0 0:00.15 top
25741 root 20 0 3432m 109m 3404 S 0.3 2.8 2482:59 java
1 root 20 0 19232 220 84 S 0.0 0.0 0:01.07 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 1:06.49 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 6:10.11 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:49.52 watchdog/0
7 root RT 0 0 0 0 S 0.0 0.0 1:14.84 migration/1
8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1
9 root 20 0 0 0 0 S 0.0 0.0 5:03.11 ksoftirqd/1
10 root RT 0 0 0 0 S 0.0 0.0 0:43.21 watchdog/1
11 root 20 0 0 0 0 S 0.0 0.0 25:15.13 events/0
12 root 20 0 0 0 0 S 0.0 0.0 27:57.65 events/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/1
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/0
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/1
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
第一行:概况
HH:mm:ss:当前的系统时间。
up xxx days, HH:mm:从本次开机到现在经过的时间。
x user:当前有几个用户登录到该机器。
load average:系统1分钟、5分钟、15分钟内的平均负载
第二行:进程数
total:进程总数
running:正在运行的进程数
sleeping:睡眠的进程数
stopped:停止的进程数
zombie:僵尸进程数
第三行:CPU使用率(%Cpu(s))
0.8%us:用户空间占用CPU百分比
0.5%sy:内核(系统)空间占用CPU百分比
0.0%ni:用户进程空间内改变过优先级的进程占用CPU百分比
98.5%id:空闲CPU百分比
0.0%wa:等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.2%st:虚拟机占用百分比
第四行:内存信息数据
total:内存总量
free:空闲内存量
used:使用中的内存量
buffers:内核缓存的内存量
第五行:交换分区的内存数据
total:交换区总量
used:使用的交换区总量
free:空闲交换区总量
cached:缓冲的交换区总量
第六行:
PID:进程ID
USER:进程所有者的用户名
PR:优先级
NI:nice值,值越低优先级越高
VIRT:进程使用的虚拟内存总量,单位kb
RES:进程使用的驻留内存,单位kb
SHR :进程使用的共享内存量,单位kb
S:进程状态
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间
COMMAND:命令名