进程
进程概述和ps管理进程
- 什么是进程
- ps -aux
- ps -ef
- uptime查看系统负载
- top
- 前后台进程切换 nice进程优先级
进程概述和ps管理进程
什么是进程?
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
- 已分配内存的地址空间;
- 安全属性,包括所有权凭据和特权;
- 程序代码的一个或多个执行线程;
- 进程状态
程序 | 二进制文件,静态 /bin/date,/usr/sbin/sshd |
---|---|
进程 | 是程序运行的过程, 动态,有生命周期及运行状态。 |
描述如下:父进程复制自己的地址空间(fork [fɔ:k] 分叉)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。
PID 和 父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。
centos5或6PID为1的进程是: init
centos7 PID为1的进程是: systemd
僵尸进程:僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。
进程的属性
- 进程ID(PID):是唯一的数值,用来区分进程
- 父进程的ID(PPID)
- 启动进程的用户ID(UID)和所归属的组(GID)
- 进程状态:状态分为运行R、休眠S、僵尸Z
- 进程执行的优先级
- 进程所连接的终端名
- 进程资源占用:比如占用资源大小(内存、CPU占用量)
ps -aux
- a: 显示跟当前终端关联的所有进程
- u: 基于用户的格式显示(U: 显示某用户ID所有的进程)
- x: 显示所有进程,不以终端机来区分
[root@love ~]# ps -axu | more
注:最后一列[xxxx] 使用方括号括起来的进程是内核态的进程。 没有括起来的是用户态进程。
上面的参数输出每列含意:
USER | 启动这些进程的用户 |
---|---|
PID | 进程的ID |
%CPU | 进程占用的CPU百分比; |
%MEM | 占用内存的百分比; |
VSZ | 进程占用的虚拟内存大小(单位:KB) |
RSS | 进程占用的物理内存大小(单位:KB) |
STAT | 该程序目前的状态,Linux进程有5种基本状态: |
5种基本状态
R | 该程序目前正在运作,或者是可被运作; |
---|---|
S | 该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。 |
T | 该程序目前正在侦测或者是停止了; |
Z | 该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态 |
D | 不可中断状态. |
5个基本状态后,还可以加一些字母,比如:Ss、R+,如下图:
它们含意如下:
- <: 表示进程运行在高优先级上
- N: 表示进程运行在低优先级上
- L: 表示进程有页面锁定在内存中
- s: 表示进程是控制进程
- l: 表示进程是多线程的
- +: 表示当前进程运行在前台
- START:该 process 被触发启动的时间;
- TIME :该 process 实际使用 CPU 运作的时间。
- COMMAND:该程序的实际指令
例:查看进程状态
[root@love ~]# vim a.txt
# 在另一个终端执行:
[root@love ~]# ps -aux | grep a.txt # 查看状态 S表示睡眠状态, + 表示前台
root 4435 0.0 0.2 151752 5292 pts/1 S+ 20:52 0:00 vim a.txt
root 4661 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00 grep --color=auto a.txt
# 在vim a.txt 这个终端上 按下: ctrl+z
[1]+ 已停止 vim a.txt
# 在另一个终端执行:
[root@love ~]# ps -aux | grep a.txt # 查看状态 T表示停止状态
root 4435 0.0 0.2 151752 5292 pts/1 T 20:52 0:00 vim a.txt
root 4675 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00 grep --color=auto a.txt
注:
- ctrl-c 是发送 SIGINT 信号,终止一个进程
- ctrl-z 是发送 SIGSTOP信号,挂起一个进程。将作业放置到后台(暂停)
- ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销
ps -ef
- -e 显示所有进程
- -f 显示完整格式输出
包含的信息如下:
UID | 启动这些进程的用户 |
---|---|
PID | 进程的ID |
PPID | 父进程的进程号 |
C | 进程生命周期中的CPU利用率 |
STIME | 进程启动时的系统时间 |
TTY | 表明进程在哪个终端设备上运行。如果显示 ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。 |
TIME | 运行进程一共累计占用的CPU时间 |
CMD | 启动的程序名称 |
注:
ps aux 是用BSD的格式来显示进程。
ps -ef 是用标准的格式显示进程
uptime查看系统负载
uptime查看CPU负载工具
[root@localhost ~]# uptime
13:22:30 up 20days, 2 users, load average: 0.06, 0.60, 0.48
弹出消息含意如下:
13:22:30 | 当前时间 |
---|---|
up 20days | 系统运行时间 ,说明此服务器连续运行20天了 |
2 user | 当前登录用户数 |
load average: 0.06, 0.60, 0.48 | 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
如果服务器的CPU为1核心,则load average中的数字 >=3 负载过高
如果服务器的CPU为4核心,则load average中的数字 >=12 负载过高
经验:单核心,1分钟的系统平均负载不要超过3就可以,这是个经验值
top命令
[root@love ~]# top
top弹出的每行信息含意如下:
第一行内容和uptime弹出的信息一样;进程和CPU的信息( 第二、三行)
当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 481 total | 进程总数 |
---|---|
1 running | 正在运行的进程数 |
480 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
Cpu(s): 0.0% us | 系统用户进程使用CPU百分比。 |
0.0% sy | 内核中的进程占用CPU百分比 |
0.0% ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.7% id | 空闲CPU百分比 |
0.0% wa | cpu等待I/0完成的时间总量。 |
0.0% hi 硬中断消耗时间 | 硬中断,占的CPU百分比。 |
0.0% si 软中断消耗时间 | 软中断,占的CPU百分比。 |
0.0 st | st:虚拟机偷取物理的时间。比如:物理机已经运行了KVM,XEN虚拟机。KVM虚拟机占用物理机的cpu时间 |
内存信息(第四五行)
内容如下:
Mem: 2033552k total | 物理内存总量 |
---|---|
340392k used | 使用的物理内存总量 |
1376636k free | 空闲内存总量 |
316524k buff/cache | 用作内核缓存的内存量 和free -k 一个意思 |
Swap: 2017948k total | 交换区总量 |
0k used | 使用的交换区总量 |
192772k free | 空闲交换区总量 |
1518148 avail Mem | 总的可利用内存是多少 |
注:如果swap分区,被使用,那么你的内存不够用了。
第7行进程信息
列名 | 含义 |
---|---|
PID | 进程id |
USER | 进程所有者的用户名 |
PR | 优先级(由内核动态调整),用户不能 |
NI | 进程优先级。 nice值。负值表示高优先级,正值表示低优先级,用户可以自己调整 |
VIRT(virtual memory usage) | 虚拟内存,是进程正在使用的所有内存(ps中标为VSZ) |
RES(resident memory usage) | 进程所使用的物理内存。实际实用内存(ps中标为RSS) |
SHR | 共享内存大小,单位kb |
S | 进程状态 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令名/命令行 |
VIRT:virtual memory usage 虚拟内存
- 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
- 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
- 进程当前使用的内存大小,但不包括swap out
- 包含其他进程的共享
- 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
- 关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
- 除M了自身进程的共享内存,也包括其他进程的共享内存
- 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
- 计算某个进程所占的物理内存大小公式:RES – SHR
- swap out后,它将会降下来
S 进程状态。
- D=不可中断的睡眠状态
- R=运行中或可运行
- S=睡眠中
- T=已跟踪/已停止
- Z=僵停
top快捷键:
- 默认3s刷新一次,按s修改刷新时间
- 按空格:立即刷新
- q退出
- P:按CPU排序
- M:按内存排序
- T按时间排序
- p: 进程IP,查看某个进程状态
- 数字键1:显示每个内核的CPU使用率
- u/U:指定显示的用户
- h:帮助
找到进程ID
[root@localhost ~]# ps -axu | grep vim
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 9667 0.0 0.2 143620 3344 pts/1 S<+ 19:15 0:00 vim a.txt
[root@localhost ~]# top -p 9667
lsof命令
lsof命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)
常用参数:
- -i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
- -p<进程号>:列出指定进程号所打开的文件;
例:
[root@love ~]# vim a.txt
[root@love ~]# ps -axu | grep a.txt
root 43641 0.8 0.2 151744 5280 pts/3 S+ 18:19 0:00 vim a.txt
root 43652 0.0 0.0 112676 996 pts/1 S+ 18:19 0:00 grep --color=auto a.txt
[root@love ~]# lsof -p 43641 # 一般用于查看木马进程,在读哪些文件
[root@love ~]# lsof -i :22 # 用于查看端口,或查看黑客开启的后门端口是哪个进程在使用
pstree工具使用
pstree:(display a tree of processes)以树状图显示进程,只显示进程的名字,且相同进程合并显示。
格式:pstree 或 pstree -p 以树状图显示进程,还显示进程PID。
[root@love ~]# pstree -p
前后台进程切换 nice进程优先级
Linux后台进程与前台进程的区别
前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随着消失。
后台进程:也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要与终端交互;Linux的大多数服务器就是用守护进程实现的。比如,Web服务器httpd等。
进程的前台与后台运行跟系统任务相关的几个命令(了解):
& | 用在一个命令的最后,可以把这个命令放到后台执行. |
---|---|
ctrl + z | 将一个正在前台执行的命令放到后台,并且暂停. |
jobs | 查看当前有多少在后台运行的进程.它是一个作业控制命令 |
fg(foreground process) | 将后台中的命令调至前台继续运行, 如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) |
bg(background process) | 将一个在后台暂停的命令,变成继续执行; 如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) |
恢复被挂起的进程
[root@love ~]# vim a.txt # 打开后,然后执行 ctrl+z
[1]+ 已停止 vim a.txt
[root@love ~]# ps -axu | grep vim
root 43710 0.8 0.2 151744 5304 pts/3 T 18:26 0:00 vim a.txt
root 43720 0.0 0.0 112676 984 pts/3 S+ 18:26 0:00 grep --color=auto vim
[root@love ~]# jobs # 查看当前有多少在后台运行的进程
[1]+ 已停止 vim a.txt
[root@love ~]# fg 1 # 将后台挂起的进程恢复到前台运行
kill关闭进程
关闭进程3个命令:kill killall pkill
- kill关闭进程:kill 进程号 关闭单个进程
- killall和pkill 命令用于杀死指定名字的进程
- 通过信号的方式来控制进程的
kill -l 列出所有支持的信号(了解) 用最多的是: 9 信号
信号编号 | 信号名 |
---|---|
1 SIGHUP | 重新加载配置 |
2 SIGINT | 键盘中断 crtl+c |
3 SIGQUIT | 退出 |
9 SIGKILL | 强制终止 |
15 SIGTERM | 终止(正常结束),缺省信号 |
18 SIGCONT | 继续 |
19 SIGSTOP | 停止 |
20 SIGTSTP | 暂停 crtl+z |
进程的优先级管理
优先级取值范围为(-20,19),越小优先级越高, 默认优先级是0
nice 指定程序的运行优先级 | 格式:nice n command |
---|---|
renice 改变程序的运行优先级 | 格式:renice -n pid |
Comments | NOTHING
该文章已经关闭评论