进程
表示程序的一次执行过程,是应用程序的运行实例,是一个动态的过程。或者描述为:进程是操作系统当前运行的程序。
进程包括动态执行的程序和数据,每一个进程都是操作系统进行资源调度和分配的一个独立单位。并且每个进程之间存在互斥和同步的关系,互斥也就是不能同时运行,同步指的是进程间通过某种通信机制实现信息交互。
运行态 | 态表示程序当前实际占用着CPU等资源 |
---|---|
就绪态 | 程序除CPU之外的一切运行资源都已经就绪,等待操作系统分配CPU资源,只要分配了CPU资源,可立即运行 |
阻塞态 | 程序在运行的过程中由于需要请求外部资源而当前无法继续执行,从而主动放弃当前CPU资源转而等待所请求资源。 |
进程和程序的区别
程序是指令的有序结合(一系列动作执行过程的描述),是一个静态的概念。程序可以以某种形式保存载存储介质上。
进程是动态的,是程序以及数据在计算机上的一次执行,没有静态的程序也就没有动态的执行。也只能在运行时存在于计算机的内存中。
进程的查看命令
ps :查看进程(只是当前查询状态下进程瞬间的状态信息) 格式 :ps 参数
常用参数:-A 列出所有进程 -a 列出不和本终端有关的所有进程 -w 显示加宽可以显示更多进程
-u 显示有效使用者相关的进程 aux 显示所有包含其他使用者的进程
[root@web1 ~]# ps -A
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd
...
10908 ? 00:00:00 systemd-hostnam
10925 pts/0 00:00:00 ps
[root@web1 ~]# ps -a
PID TTY TIME CMD
10944 pts/0 00:00:00 ps
[root@web1 ~]# ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1532 0.0 1.5 330012 29172 tty1 Ssl+ 11:26 0:10 /usr/b
root 2734 0.0 0.1 116396 2992 pts/0 Ss 11:28 0:00 bash
root 10966 0.0 0.0 151064 1820 pts/0 R+ 18:12 0:00 ps -u
[root@web1 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128164 6860 ? Ss 11:26 0:03 /usr/l
root 2 0.0 0.0 0 0 ? S 11:26 0:00 [kthre
root 3 0.0 0.0 0 0 ? S 11:26 0:00 [ksoft
root 5 0.0 0.0 0 0 ? S< 11:26 0:00 [kwork
...
//(1-4列)进程拥有者 pid 占用的CPU使用率 占用的内存使用率
(5-7列)占用的虚拟内存大小 占用的内存大小 运行的终端号码
(8列)进程状态(D:不可中断 R:运行中 S:休眠 T:暂停 Z:僵尸进程 W:没有足够的内存可分配 <:高优先级的行程 N:低优先级的行程)
(9-11列)进程开始时间 累计使用CPU时间 执行的命令
top :动态的查看进程,它提供了实时的系统状态监控,可以按照CPU使用、内存使用、执行时间等指标对进程进行排序。
注:按字母P键表示按照CPU的使用率排序,按字母M键表示按照Memory的使用率排序,按字母N键表示以PID排序,按字母T键表示按照CPU使用时间排序,按字母K键则表示kill进程,按字母R键表示可以renice一个进程等。
[root@web1 ~]# top
top - 18:26:38 up 7:00, 2 users, load average: 0.00, 0.01, 0.05
//基础信息:命令的刷新时间 启动时间 目前登录用户个数 系统的负载:最近一分钟内的系统负载 最近五分钟内的平均负载 最近15分钟内的平均负载
Tasks: 244 total, 1 running, 243 sleeping, 0 stopped, 0 zombie
//进程情况: 一共多少进程 正在运行 休眠的个数 停止的进程 僵尸进程
%Cpu(s): 5.2 us, 2.4 sy, 0.0 ni, 92.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
//CPU信息:用户空间占用的CPU百分比 内核空间占用 改变过优先级的进程 空闲CPU百分比 wa代表I/O等待百分比 hi硬中断占用的CPU百分比 si软中断占用的CPU百分比 st虚拟机偷取时间
KiB Mem : 1867024 total, 410628 free, 808252 used, 648144 buff/cache
//物理内存的使用状态:物理内存总量 空闲内存 已使用内存 缓存使用的内存
KiB Swap: 2097148 total, 2097148 free, 0 used. 818516 avail Mem
//是虚拟内存的使用状态:内存总量 空闲内存 已使用内存 缓冲的交换区总量
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
//进程id 所有者 进程优先级 nice值(负值表示高优先级,正值低优先)
VIRT(虚拟内存总量 单位为Kb vIRT-SWAP+RES) RES(进程使用未被换出的物理内存大小 单位为Kb RES=CODE+DATA) SHR(共享内存大小 单位为Kb)
%CPU上次更新到现在的CPU时间占用百分比 %MEM进程使用的物理内存百分比 TIME+进程使用的CPU时间总计,单位为1/100秒 COMMAND进程名称(命令名/命令行)
1403 root 20 0 344516 30992 11504 S 1.3 1.7 0:45.89 X
2405 root 20 0 721536 24408 15060 S 1.0 1.3 0:12.72 gnome-terminal-
2014 root 20 0 2143004 132756 41084 S 0.3 7.1 1:38.11 gnome-shell
2123 root 20 0 1364484 29036 16352 S 0.3 1.6 0:05.02 gnome-settings-
2191 root 20 0 384956 18632 14780 S 0.3 1.0 0:59.85 vmtoolsd
1 root 20 0 194928 6864 2720 S 0.0 0.4 0:08.31 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.44 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.13 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:07.61 rcu_sched
进程的终止:kill ,killall
kill [信号代码] 进程ID
常用信号代码如下: HUP(1) 重启(不改变主进程,也就是相当于软重启)
KILL(9) 强行结束
TERM(15) 正常结束 可以使进程正常退出
killall 进程名字 结束进程较为安全
lsof 查询进程打开的文件 lsof [ options ] filename
打开的文件可以是普通文件、目录、网络文件系统中的文件、字符设备、管道、socket等
lsof filename 显示打开指定文件的所有进程
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件 #lsof -u username 显示所属于user进程打开的文件
lsof -g gid 显示归属于gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,默认是不加-n参数
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46指IPv4或IPv6
protocol指TCP或UDP
hostname指主机名
hostaddr是IPv4地址
service是/etc/service中的service name
port是端口
[root@guowei ~]# lsof /root //显示打开指定文件/root的所有程序
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gnome-ses 1794 root cwd DIR 253,0 4096 33574977 /root
gnome-she 2014 root cwd DIR 253,0 4096 33574977 /root
...
[root@guowei ~]# lsof -c ibus-daem //显示COMMAND列中包含指定字符ibus-daem的进程所有打开的文件
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ibus-daem 2021 root cwd DIR 253,0 4096 33574977 /root
ibus-daem 2021 root rtd DIR 253,0 235 64 /
...
[root@guowei ~]# lsof -u root | more //显示所属于root进程打开的文件
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 235 64 /
systemd 1 root rtd DIR 253,0 235 64 /
systemd 1 root txt REG 253,0 1523560 34432363 /usr/lib/systemd/systemd
...
[root@guowei ~]# lsof | more
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
//进程的名称 进程id 线程id 用户 文件描述符 文件类型 磁盘名 文件大小 文件标识(索引节点) 文件名称
systemd 1 root cwd DIR 253,0 235 64 /
systemd 1 root rtd DIR 253,0 235 64 /
systemd 1 root txt REG 253,0 1523560 34432363 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20040 288885 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 261336 618875 /usr/lib64/libblkid.so.1.1.0
...
[root@guowei ~]# lsof -i:22 //可以查看使用某个端口22的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1140 root 3u IPv4 22327 0t0 TCP *:ssh (LISTEN)
sshd 1140 root 4u IPv6 22336 0t0 TCP *:ssh (LISTEN)
nice、renice 进程的优先级调整
通过top命令可以看到其输出中有NI字段,标记了对应进程的优先级,取值范围是-20~19,数值越低代表优先级越高,也就能更多地被操作系统调度运行,如果一个进程在启动时并没有设定nice优先级,则默认使用0。
# nice -n -10 ./job.sh //将脚本名为job.sh 的优先级设置为 -10
# renice -10 -p 1234 //将PID为1234的进程的nice优先级调整为-10
利用tpo命令修改
查到该进程的PID 在top界面按r键 出现 PID to renice 后输入PID
top - 17:49:10 up 20:27, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 247 total, 2 running, 245 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 5.9 sy, 0.0 ni, 94.1 id, 0.0 wa, 0.0 hi, 0.0 si,
KiB Mem : 1867048 total, 281856 free, 819896 used, 765296 buff/cac
KiB Swap: 2097148 total, 2097108 free, 40 used. 800748 avail Me
PID to renice [default pid = 2405]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+
2405 root 20 0 740016 31076 15800 S 6.2 1.7 0:25.26
然后在出现的 Renice PID XXXX to value 后输入修改的nice优先级即可
top - 17:49:10 up 20:27, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 247 total, 2 running, 245 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 5.9 sy, 0.0 ni, 94.1 id, 0.0 wa, 0.0 hi, 0.0 si,
KiB Mem : 1867048 total, 281856 free, 819896 used, 765296 buff/cac
KiB Swap: 2097148 total, 2097108 free, 40 used. 800748 avail Me
Renice PID 2345 to value
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+
2405 root 20 0 740016 31076 15800 S 6.2 1.7 0:25.26