第七章 进程管理
-
进程是是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
-
程序是使用计算机语言编写可以实现特定目标或解决特定问题的代码集合。
-
进程管理作用:判断服务器健康状态、查看系统中所有进程、“杀死”进行
-
进程监控命令
-
ps命令
查看系统中所有进程的详细信息基本格式:
ps [选项]
-a:显示一个终端中的所用进程
-u:显示进程的归属用户及内存使用情况
-x:显示没有控制终端的进程
-l:以长格式显示更加详细的信息
-e:显示所有进程
ps -aux :显示系统中所有进程
ps -le:显示系统中所有进程,看到进程的父进程PID和进程优先级
ps -l:只能看到当前shell产生的进程
ps -aux UESR PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 2872 1416 ? Ss Jun04 0:02 /sbin/init root 2 0.0 0.2 2872 1416 ? Ss Jun04 0:02 /sbin/init
UESR 字段:进程是由哪个用户产生的
PID字段:进程的ID
%CPU字段:进程的CPU使用率
%MEM字段:进程的物理内存使用率
VSB字段:进程的虚拟内存占用大小
RSS字段:进程实际内存占用大小
TTY字段:进程是在哪个终端运行的,其中tty1-tty7本地控制台终端,tty1-tty6本地字符界面终端,tty7图形界面终端。pts/0~255代表虚拟终端,一般是远程链接的终端
STAT字段:进程状态
-D:进程处于不可被唤醒的睡眠状态,通常用于I/O
-R:进程正在运行
-S:进程处于睡眠状态,可以被唤醒
-T:进程处于停止状态,可能在后台暂停或处于调试状态
-W:进程处于内存交互状态(Linux2.6内核开始无效)
-X:进程是“死掉”的进程
-Z:进程是“僵尸”进程,进程已终止但还在内存当中;
-<:进程具有高优先级
-N:进程具有低优先级
-L:进程被锁入内存
-s:进程包含子进程
-l:进程具有多线程
-+:进程处于后台
START字段:进程的启动时间
TIME字段:进程占用CPU运算的时间
COMMAND字段:产生进程的命令名
ps -le F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 s 0 1 0 0 80 0 - 718 - ? 00:00:02 init
F字段:进程标志,说明进程的权限,常见的标志有两个,1:可以被复制,不能被执行;4:超级用户权限
S字段:进程状态,和STAT字段一致
UID字段:运行进程的用户ID
PID字段:进程的ID
PPID字段:父进程的ID
C字段:CPU占用率
PRI字段:进程优先级,数值越小,优先级越高
NI字段:进程优先级,数值越小,优先级越高
ADDR字段:进程在内存的占用位置
SZ字段:进程占用内存的大小
WCHAN字段:进程是否在运行。“-”代表在运行
TTY :进程是由哪个终端产生的
TIME:进程占用CPU的运算时间
CMD:产生进程的命令名
-
pstree命令
以树形结构显示程序和进程之间的关系
基本格式:
pstree [选项] [PID或用户名]
-a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-c:不使用精简法显示进程信息,即显示进程中包含的子进程和父进程
-n:根据进程是PID来排序
-p:显示进程的PID
-u:显示进程对应的用户名称
init是系统启动的第一个进程,不指定PID或用户名时,以init为根进程
-
top命令
动态监听进程的运行状态基本格式:
top [选项]
-d 秒:指定top命令每隔几秒刷新,默认是三秒
-b:使用批处理模式输出,一般和"-n"选项合用,用于吧top命令定向到文件中
-n 次:指定top命令执行的次数
-p 进程PID:查看指定ID的进程
-s:使top命令在安全模式中运行,避免在交互模式中出现错误
-u 用户名:只监听某个用户的进程
在top交互窗口中,可使用如下命令进行交互操作
?或h:显示交互命令的帮助
P:按照CPU利用率排序
M:按照内存占用排序
N:按照PID排序
T:按照CPU的累计运算时间排序
k:按照PID给予某个进程一个信号,一般用于终止某个进程,信号9是强制终止信号
r:按照PID给某个进程重设优先级
q:突出top命令
top的运行结果分为两个部分,第一部分是前五行,显示整个系统的资源使用状况;第二部分从第六行开始,显示系统中的进程信息。
第一行是任务信息:
内容 说明 05:43:27 表示当前时间 up 1 day 4:52 系统运行时间 本机已运行1天4小时53分钟 2 users 当前登录用户数 load average: 0.58, 0.41, 0.30 系统负载,1分钟、5分钟、15分钟的平均负载如果CPU是单核,超过1就是高负载,如果CPU是四核,超过4就是高负载 第二行是进程信息
内容 含义 159 total 系统中进程总数 1 running 正在运行的进程数 158 sleeping 睡眠的进程数 0 stopped 停止的进程数 0 zombie 僵尸进程数 第三行是CPU信息
内容 含义 37.0% us 用户模式的CPU占用率 3.7% sy 系统模式的CPU占用率 0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比 59.3% id 空闲CPU百分比 0.0% wa 等待输入/输出的CPU占用百分比 0.0% hi 硬中断(Hardware IRQ)占用CPU的百分比 0.0% si 软中断(Software Interrupts)占用CPU的百分比 0.0% st 虚拟时间比率,有虚拟机时,虚拟CPU等待实际CPU的时间比率 第四行是物理内存信息
内容 含义 1530752 K total 物理内存总量 1481968 K used 使用的物理内存总量 48784 K free 空闲内存总量 70988 K buffers(buff/cache) 用作内核缓存的内存量 第五行是行交换分区信息
内容 含义 3905532 K total 交换区(虚拟内存)总量 267544 K used 使用的交换区总量 3637988 K free 空闲交换区总量 617312 K cached 作为缓存的交换分区总量 缓存:在读取硬盘中数据时,把最常用的数据保存在内存的缓存区中,再次读取数据时就不去硬盘读取了,而在内存读取,为了加快数据从硬盘中读取的速度而设置的空间
缓冲:在向硬盘写入数据时,先把数据放入内存缓冲区,然后再向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘反复寻道。为了加快数据写入硬盘的速度而设置的空间
第二部分
字段 含义 PID 进程id USER 进程所有者的用户名 PR 优先级 NI nice值。负值表示高优先级,正值表示低优先级 P 最后使用的CPU,仅在多CPU环境下有意义 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES 进程使用的物理内存大小,单位kb。RES=CODE+DATA SHR 共享内存大小,单位kb S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU CPU占用率 %MEM 内存占用率 TIME+ 进程共占用CPU的时间 COMMAND 命令名/命令行 -
lsof命令
查询进程在调用那些文件基本格式:
lsof [选项]
-c 字符串:只列出字符串开头的进程打开的文件
+d 目录名:列出某个目录中所有被进程调用的文件
-u 用户名:只列出某个用户进程打开的文件
-p PID:列出PID所指的进程打开的文件
-
-
结束进程命令
常见进程信号
信号代号 信号名称 说明 1 SIGHUP 使进程 立即关闭,重新读取配置文件之后重启 9 SIGKILL 立即结束程序运行,本信号不能被阻塞、处理、忽略,一般用于强制杀死进程 15 SIGTERM 正常结束进程,使kill的默认信号 19 SIGSTOP 暂停进程,相当于按下Ctrl+Z,该信号不能被阻断 -
kill命令
向进程发送一个信号
基本格式:
kill [-信号] PID
-
killall命令
依靠进程名关闭进程,可杀死一个用户的所有进程
基本格式:killall [选项] [-信号] 进程名
-i:交互式询问是否要杀死某个进程
-I:忽略进程名的大小写
-
pkill命令
和killall基本相同,通过进程名来结束进程,还可以按照终端号来踢出登录用户基本格式:
pkill [-信号] 进程名
基本格式:
pkill [-信号] [-t 终端号] 进程名
-
-
PRI内核动态调整优先级,用户不能修改,NI用户可修改的优先级;数值越小越先被执行
-
PRI(最终值)=PRI(原始值)+NI
-
NI值修改注意事项
- NI值的范围-20~19
- 普通用户NI的可调节范围0~19
- 普通用户只能调高NI值
- root可以设定任意用户的NI值
-
NI值修改命令
基本格式:
nice [-n NI值] 命令
只能修改为启动的NI值
基本格式:
renice [优先级] PIDPID
只能修改为运行中的NI值
-
僵尸进程的产生一般是由于进程非正常停止或程序编写错误,因此父进程优先于子进程结束,而父进程又没有正确的回收子进程,从而子进程一直存在在内存中。