文章目录
什么是进程
进程是已启动
的可执行程序的运行实例
,(其实进程不执行的时候就是一个文件),进程有以下组成部分:
- 已分配内存的地址空间;
- 安全属性,包括所有权凭据和特权;
- 程序代码的一个或多个执行线程;
- 进程状态。
程序∶具有执行代码和执行权限的文本文件,是静态的,如:/usr/bin/passwd ,/usr/sbin/useradd
进程∶是程序运行的过程
,动态,有生命周期及运行状态。
一个文件如何变成进程
windows上的进程
在任务管理器上可以查看:
进程的生命周期
- 父进程
复制
自己的地址空间(fork
)创建一个新的(子)进程结构。一般父进程fork子进程之后,父进程的状态就变成sleeping,子进程的状态就是runing。 - 每个新进程分配一个唯一的进程ID(PID ),满足跟踪安全性之需。
- 任何进程都可以创建子进程。
- 任何系统都会有一个电源接通就执行的进程,所有进程都是第一个进程的后代,第一个进程就称为系统进程:
Centos5/6系统进程: init
Centos7系统进程:systemd
, 该进程的PID是1
进程的状态
- R:running运行状态
- T:stopped状态
- Z:zombie卡死状态
- S:sleeping休眠状态
进程管理
静态查看进程ps
基本用法
ps是查看进程linux进程
的工具。
命令 ps aux
:用于查看系统运行的进程
ps aux | head -2
: 之查看前两行的进程
ps aux | grep vim
: 查找vim进程
eg运行:ps aux | head -2
输出如下内容:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.8 0.3 128436 6384 ? Ss 23:08 0:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
列:
- USER :运行进程的用户
- PID:进程的唯一标识
- %CPU:CPU占用率
- %MEM:内存占用率
- VSZ:占用虚拟内存
- RSS:占用实际内存
- TTY:进程运行的终端, 不同的终端窗口有自己的标识。如果是?表示本机启动的进程。
- STAT:进程的状态:s(进程sleeping)、
- START:进程的启动时间
- TIME:占用CPU的总时间
- COMMAND:路径,表示哪个程序
携带参数
ps a
显示终端机下的所有进程
ps u
以用户为主的格式来显示程序状况
ps x
不以终端机来区分
进程排序查看
ps aux --sort -需要排序的列
(-减号表示降序, 没有减号默认升序)
eg:
ps aux --sort %cpu
: 表示以%cpu列升序排列
父子进程
ps -ef
: 可以查看进程的父子关系
PPID:表示父进程的PID是多少
PID:表示该进程的唯一标识
eg:
执行ps -ef
后:
查看进程指定列
ps axo 需要查看的列(以,进程分割)
eg:
ps axo user,pid,ppid,%mem,command | head -3
输出:
USER PID PPID %MEM COMMAND
root 1 0 0.3 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0.0 [kthreadd]
动态查看进程top
top可以实时查看进程状态。
命令:top
(只有一个top),效果如下
其他参数
top -d 3
:系统每3秒刷新一次top -p 进程号
:只查看某一个程序(查看多个进程,进程号使用,
分隔)
系统的性能部分
第一行:
top - 00:42:01 up 17 min,4 users,load average: 0.40,0.24,0.32
- top: 程序名
- 00:42:01: 系统时间
- up 17 min:程序运行时间
- 4 users:登陆用户数
- load average: 0.40,0.24,0.32:CPU负载, 在5分钟,10分钟,15分钟的CPU占用率。
第二行:
Tasks: 217total, 2 running,215 sleeping,0 stopped, 0 zombie
- Tasks: 217total : 总进程数,计算机开了多少个程序
- 2 running:两个运行的进程
- 215 sleeping:215个睡眠的程序
- 0 stopped:0个停止的进程
- 0 zombie:0个卡死的进程
第三行:
Cpu(s): 7.1 us,17.3 sy,0.0 ni,75.3 id,0.0 wa,0.0 hi,0.3 si,0.0 st
CPU占用率:
- 7.1 us:用户进程占用率
- 17.3 sy:系统进程占用率
- 0.0 ni:ni表示优先级进程占用率
- 75.3 id:id表示cpu空闲的占用率
- 0.0 wa:wa表示cpu等待时间
- 0.0 hi:表示硬件占用的内存
- 0.3 si:表示软件占用的内存
- 0.0 st:表示虚拟机占用的内存
第四行:
KiB Nem : 2027864 total, 549988 free, 758648 used, 719228 buff/cache
物理内存占用情况
KiB Nem :
- 2027864 total :系统总内存:2个G
- 549988 free:0.5G的空闲内存
- 758648 used:0.7G的已占用内存
- 719228 buff/cache:0.7G的缓存
第五行:
KiB Swap: 2097148 total,2097148 free,used.1097756 avail Mem
虚拟内存(交换分区——存放常用数据)占用情况:
KiB Swap:
- 2097148 total:系统的虚拟内存2个G
- 2097148 free:系统的空闲虚拟内存2个G
- 0used:系统使用中的虚拟内存0个G
系统的进程
和ps查看进程类似
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- PID:进程的唯一标识
- USER:运行进程的用户
- PR :进程在系统中的优先级
- NI:进程的nice优先级(该优先级可以手动调整,+20就是系统优先级PR)
- VIRT:
- RES:
- SHR:
- S:进程的状态
- %CPU:CPU占用率
- %MEM:内存占用率
- TIME+:占用CPU的总时间
- COMMAND:路径,表示哪个程序
top常用内部指令
运行成功top指令后,页面停留在上述界面,此时可以使用如下指令进行内存的查看。
- h|? :帮助
- M:按内存的使用排序
- P:按CPU的使用排序
- N:以PID的大小排序
- <:向前
>
:向后- z:彩色,Z设置彩色,使用数字调整
使用信号控制进程
信号种类
执行kill -l
可以查看所有的信号种类:
编号 | 信号名 |
---|---|
1 | SIGHUP重新加载配置 |
2 | SIGINT键盘中断Ctrl+C |
3 | SIGQUIT键盘退出Ctrl+\,类似SIGINT |
9 | SIGKILL强制终止,无条件,直接从内存杀死 |
15 | SIGTERM终止(正常结束),默认值 |
18 | SIGCONT继续 |
19 | sIGSTOP暂停 |
20 | SIGTSTP键盘暂停Ctrl+Z |
15号比9号更安全,当程序卡死的时候可以直接使用9
使用控制信号
kill -信息编号 进程号
(信息编号不写的话默认是15)
kill -1 进程号
: 重新加载进程的配置信息
kill -2 进程号
: 中断进程,等效于ctrl + c
进程优先级nice
每个CPU在一个时间点上只能处理一个进程,通过时间片技术来同时运行多个程序,默认情况下所有进程占用的时间片是一样的,也就是说优先级是一样的。
优先级特性
nice的数值表示优先级的大小,优先级的取值是-20到19
nice值越大,表示优先级越低,例如+19
nice值越小,表示优先级越高,例如-20
系统的优先级
系统的优先级有两种:
- 一种是用nice值控制的,取值是
-20到19
,我们可以调整, - 还有一种是比nice权重更大的优先级PR,我们不能控制。取值是
-99到39
,其中0到39
是由nice控制的。
查看进程的nice级别
- ps指令查看优先级
ps axo pid,command,nice --sort=-nice
展示进程的pid(进程id),command(进程名),nice(优先级)列。
eg:执行ps axo pid,command,nice --sort=-nice
命令:
PID COMMAND NICE
32 [khugepaged] 19
766 /usr/sbin/alsactl -s -n 19 19
2379 /usr/libexec/tracker-extrac 19
2382 /usr/libexec/tracker-miner- -
2386 /usr/libexec/tracker-miner- 19
2392 /usr/libexec/tracker-miner- -
- top指令查看优先级
top -d 1 -p 32
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32 root 39 19 0 0 0 S 0.0 0.0 0:01.08 khugepaged
PR表示的是该进程在系统中的优先级
NI表示的是该进程的nice优先级
NI+20 = PR
设置进程的优先级
- 默认进程下,启动进程时,通常会继承父进程的nice级别,默认为0。
我们可以在启动进程的时候设置进程的优先级,nice值:
nice -n -5 启动进程的命令
eg:
nice -n -5 sleep 6000 &
:就是启动一个sleep6000秒的进程并且优先级是-5
sleep 6000 &
:是sleep进程的启动命令,&表示在后台进行,不影响页面的正常输入。
[root@localhost ~]# nice -n -5 sleep 6000 &
[1] 4532
[root@localhost ~]# ps axo pid,command,nice --sort=-nice | grep sleep
4546 sleep 60 0
4550 grep --color=auto sleep 0
4532 sleep 6000 -5
- 已经运行的程序也可以设置优先级
renice 优先级 进程号
[root@localhost ~]# ps axo pid,command,nice --sort=-nice | grep sleep
4546 sleep 60 0
4550 grep --color=auto sleep 0
4532 sleep 6000 -5
[root@localhost ~]# renice -20 4532
4532 (进程 ID) 旧优先级为 -5,新优先级为 -20
[root@localhost ~]# ps axo pid,command,nice --sort=-nice | grep sleep
4719 sleep 60 0
4759 grep --color=auto sleep 0
4532 sleep 6000 -20
作业控制
作业控制的概念
作业控制是一个命令行功能,也叫后台运行。
前台进程和后台进程
前台进程:(foreground:fg)在终端中运行的命令,站领终端。
后台进程:(background:bg)没有控制终端,他不需要终端的交互,看不见,但是在运行
后台进程控制
设置后台进程
- &:正常情况下在终端输入的命令就是前台进程,例如当我们在终端输入
sleep 5
,5秒内终端是被占用的状态我们无法再执行其他的命令。
此时我们将进程放置到后台就不会影响页面的操作。
放置后台的操作:执行进程的时候再末尾添加&
符号即可,如sleep 5 &
。 ctrl + z
:表示将当前运行的前台进程直接放置到后台,但是通过这种方式伸直的后台进程的状态是终止
查看后台进程
job
命令可以直接查看后台运行的进程
eg:
[root@localhost ~]# jobs
[1] 运行中 nice -n -5 sleep 6000 &
[2] 运行中 sleep 6000 &
[3]- 运行中 sleep 5000 &
[4]+ 运行中 sleep 7000 &
+
表示最新的后台进程
第一列表示进程在后台进程
的进程号
调动后台进程到前台
fg 后台进程的进程号
表示将后台指定进程调动到前台
eg:fg 4
, 就表示将sleep 7000 &
进程放置到前台bg 后台进程的进程号
可以重新将后台停止运行的程序运行起来
消灭后台进程
kill %后台进程号
注意:“kill 1”和“kill%1”不同,前者终止PID为1的进程,后者杀死作业序号为1的后台程序。
虚拟文件系统proc
虚拟文件系统是指不是真实存在的,虚拟内容一般存储在/proc
文件夹中,虚拟文件系统采集服务器自身内核、进程运行的状态信息。
- 系统CPU的信息:
/proc/cpuinfo
,存储cpu的各种文件参数 - 系统内存信息:
/proc/meminfo
,存储系统的内存信息 - 系统内核信息:
/proc/cmdline
,存储系统的内核信息
补充:内存和外存
内存和外存是计算机中两种重要的存储设备,它们的工作原理和作用不尽相同:
-
存储方式:
内存(RAM):也被称为主存储器或RAM(随机存取存储器),是一种暂时存储数据
的装置,供计算机在运行时直接使用。数据在内存中的存储极易被更改
,并且当计算机断电时,内存中的所有数据将被清除。
外存储器:也被称为辅助存储器,是用来长期保存数据的装置,如硬盘、U盘
等。 -
存储容量:
内存:内存的大小通常较小,一般在GB或TB规模,以满足计算机快速处理任务的需要。
外存储器:外存储器的容量很大,可以达到数GB甚至TB。 -
存取速度:
内存:内存的访问速度非常快,能够满足处理器快速处理信息的需求
。
外存储器:外存储器的访问速度相对较慢,但用于存储长期的,不经常变。 -
价格
内存:贵。
外存:便宜。
内存和外存的合作关系:
- 运行过程中,处理器运行程序必须要
从内存中读取
,因为内存的读写速度非常快,能够满足高速运行计算机程序的需要。而内存中的数据需要提前从外存加载到内存中以供处理器(CPU)快速处理。内存是计算机的临时存储设备,当程序运行完毕,不再需要这些数据时,这部分内存可以被清空,释放出来。 - 外存的读取速度大概是 50MB/S,内存的读取速度大概是800MB/S,CPU的读取速度大概是1000MB/S,显然外存的速度远远达不到CPU运行的速度, 所以,内存存在的原因是因为它可以提供给处理器极高的数据访问速度,是计算机运行必不可少的部分。
其实内存也并不是一个虚无飘渺的东西,它也需要物理介质来存储数据,如:内存条。内存的物理介质通常是半导体器件(如DRAM芯片),它能够存储并快速获取数据,从而实现计算机程序的运行。同时这种物理介质是易失的,也就是说,当断电或重新启动计算机后,其中的数据将消失。
补充:查看内存的指令
free -查看的单位
m: MB单位
g:GB单位
k:KB单位
eg:
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 782 126 19 1072 1028
Swap: 2047 0 2047
补充:查看磁盘空间
df -hT
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 974M 0 974M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 11M 980M 2% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 5.4G 12G 32% /
/dev/sda1 xfs 1014M 172M 843M 17% /boot
tmpfs tmpfs 199M 40K 198M 1% /run/user/0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /run/media/root/CentOS 7 x86_64