一、进程概述和ps管理进程
-
进程的定义和功能
-
进程是已启动的可执行程序的运行实例
-
组成部分:
-
已分配的内存地址空间
-
PID
-
程序代码
-
进程状态
-
-
进程管理包括:进程调度、中断处理(插队)、信号、进程优先级(分配时间长短)、进程切换、进程状态、进程内存等
-
进程生命周期
-
父进程:复制自己的地址空间创建新的(子)进程结构
每个新进程分配一个PID
PID和PPID是子进程环境的元素,任何进程均可创建子进程
所有进程均为第一个进程的后代(C6:init C7:systemd)
-
僵尸进程:不执行代码,同时占用内存地址空间
进程接收到终止信号到结束所有任务有段时间间隔
进程执行完代码后,向父进程发送相关终止报告
正常情况下父进程接收到报告,会移除所有子进程的数据结构
若父进程未收到子进程退出信号或尚未响应,子进程成僵尸
kill不能杀死僵尸进程(你无法杀死一个死人)
杀死父进程可能会带走子进程(砍了死灵法师骷髅可能会散架)
父进程PPID为1的僵尸进程需重启解决
-
线程:进程中的执行单位,在同一进程中与其他线程并行运行
线程之间可共享资源,如内存、地址空间、打开文件等
-
上下文切换(即进程切换):运行哪个进程,切换哪个进程的代码
CPU运行期间进程信息存储在CPU的寄存器和高速缓存中
执行的进程被加载到寄存器内的数据为上下文(运行A,寄存器中存A的上下文)
CPU运行过程中先存储 运行进程 的上下文
将下个运行进程的上下文恢复到寄存器,即为上下文切换
每次切换均需刷新寄存器和cache,切换过多会导致性能下降
-
中断处理
优先级最高的任务之一
通常由I/O产生,如网络接口、键盘、控制器等
中断信号到内核时,内核须切换到新进程来处理中断
此时发生上下文切换,中断过多性能下降
-
硬中断:硬件产生,需快速响应(磁盘I/O、键盘、鼠标中断等)
-
软中断:用来处理可推迟的任务(TCP/IP、SCSI操作等)
-
-
-
-
进程属性
-
PID:唯一标识,除systemd一般不固定
-
PPID:父进程PID
-
启动进程的用户UID和所属组GID
-
进程状态:运行、休眠、僵尸
-
进程优先级
-
进程所连接终端名
-
进程资源占用:如内存、CPU占用比例
-
-
ps查看进程工具
-
ps aux
-
a:显示和当前终端关联的所有进程
-
u:基于用户格式显示
-
x:显示所有进程,不以终端区分
USER PID %CPU %MEM VSZ(KB) RSS(KB) TTY STAT START TIME COMMAND 启动进程用户 PID 进程占用CPU百分比 占用内存百分比 占用虚拟内存大小 占用物理内存大小 终端 进程状态 进程启动时间 进程使用CPU时间 程序指令 -
STAT进程5种基本状态
-
R:正在运行或在运行队列
-
S:休眠状态,可被某些信号唤醒
-
T:停止状态(如Ctrl + Z)
-
Z:僵尸进程
-
D:不可中断,通常在
I/O
过程中
附加字母:
-
<:进程运行在高优先级
-
N:进程运行在低优先级
-
L: 进程有页面锁定在物理内存中(不可放到swap中运行)
-
s: 控制进程,可向子进程发送信号
-
l
: 多线程进程 -
+:进程在前台运行
-
-
[command]:内核态进程,运行在内核中内存地址空间
PS:内存地址空间分为内核运行空间(K)和用户运行空间(U)
-
-
ps -ef
-
-e:显示所有进程
-
-f: 显示完整格式输出
输出包含信息:
-
PPID:父进程PID
-
C:CPU利用率
-
剩余aux中都有
-
-
free [-k/m/g/h]:默认单位KB,总体使用情况
total used free shared buff/cache available Mem 总量 已用 空闲 进程共享内存 缓冲/缓存内存 内存耗尽时释放 可用空间 Swap 总量 已用 空闲 free + buff/cache未必等于available:系统本身保留部分空间 或 buff不可全部使用
-
二、uptime查看系统负载——top动态管理进程
-
uptime:查看CPU负载工具(与w命令第一行相同)
14:01:35 up 5:36, 3 users, load average: 0.00, 0.01, 0.05
14:01:35 up 5:36 3 users load average:0.00,0.01,0.05 当前时间 运行时间 登录终端数 系统负载:1min、5min、15min前到现在任务队列平均长度 -
CPU任务队列数为3:3个进程排队等待一个CPU资源
-
核心数:2个CPU3个核心,系统认为6个CPU核心
-
负载高低:load average/核心数,单核>=3则负载过高
-
-
-
top(交互式,最全面)
-
第一行:即uptime
-
第二三行
字符 含义 Task: 111total 进程总数111 1 running 正在运行进程数 110 sleeping 睡眠的进程数 0 stop 停止的进程数 0 zombie 僵尸进程数 %Cpu(s): 0.0 us 系统用户进程使用CPU百分比 "s"为汇总,按"1"显示全部CPU使用率 0.0 sy 内核中进程占用CPU百分比 0.0 ni 用户进程空间内改过优先级的进程占用CPU百分比 100.0 id 空闲CPU百分比 0.0 wa CPU等待I/O完成的时间的总量 0.0 hi 硬中断占CPU百分比 0.0 si 软中断占CPU百分比 0.0 st (steal) 虚拟机占用物理机CPU时间百分比 -
第七行
列名 含义 PID 进程ID USER 进程所有者用户名 PR 优先级,用户不可自己调整,默认值20 rt(realtime)表示实时调整优先级 NI(nice) 优先级,用户可以自己调整,默认值0 NI值+20即为PR值,可正可负 VIRT 虚拟内存,进程申请大小 RES 物理占用内存,实际使用大小,包括共享内存 SHR 共享内存(KB),包括自身及与其他进程的共享内存 进程实际物理内存大小 = RES - SHR S 进程状态 %CPU 上次更新到现在CPU时间占比 不同系统可能多取个相加>100%,当前版本取总体比例 %MEM 进程使用物理内存占比 TIME+ 使用CPU总时长,单位0.01s COMMAND 命令名/命令行 -
快捷键
-
默认3s刷新,按s修改刷新时间
-
按 空格 立即刷新
-
q:退出
-
P:按%CPU排序
-
M:按内存排序
-
T:按时间排序
-
top -p PID:查看指定进程
-
top -u/U 用户名:查看指定用户
-
h:帮助
-
-
lscpu:查看CPU详细信息(socket表示实际CPU数量)
-
make -j 4:用4核进行编译
-
-
fuser(根据文件目录或端口号找进程)
-
-k:默认为结束进程,也可发送信号
-
-i:结束进程前交互式确认,一般与k一起用
-
-u:进程后显示进程所属用户
-
-c:查看有哪些进程访问挂载点下文件
-
PS:进程号后有c表示执行用户正在该目录中
-
-
lsof(根据进程找打开的文件)
-
-p PID:列出指定PID所打开的文件
-
-i :22:查看22端口有哪几个进程在使用
-
-
ss(用于查看套接字)类似于netstat
-
-a:显示监听和建立连接的套接字
-
-t: 输出TCP套接字
-
-u:输出UDP套接字
-
-n:以端口号显示(默认显示服务名称)
-
-p:显示使用套接字的进程
-
三、前后台进程切换——nice进程优先级——screen后台执行命令
-
Linux前台进程和后台进程的区别
-
前台进程:终端中运行,执行时持续占用前台
-
依赖终端:关闭终端则进程关闭
-
-
后台进行:进程放入后台运行,不影响当前终端执行后续命令
-
脱离终端:终端关闭不影响进程运行
-
守护进程Daemon(httpd、sshd)
-
-
-
-
前台与后台运行
命令 作用 & 写于命令之后,将其放入后台运行 Ctrl + z 将正在执行的前台命令放入后台并暂停 jobs 查看当前终端在后台运行的进程 fg 将后台命令调到前台继续运行,fg + 命令编号 bg 令后台暂停的命令继续执行,bg + 命令编号 nohup 脱离终端。nohup CMD & -
kill向进程发送信号
-
kill:kill PID
-
kill -l:列出所有信号
信号编号 信号名 作用 1 SIGHUP 重新加载配置 2 SIGINT 键盘中断 Ctrl + c 3 SIGQUIT 退出 9 SIGKILL 强制终止 15 SIGTERM 默认终止 18 SIGCONT 继续 19 SIGSTOP 停止 20 SIGTSTP 暂停 Ctrl + z -
重设ssh端口
vim /etc/ssh/sshd_config # 修改配置文件 Port 2200 # 修改端口号 ps aux | grep ssh # 查找ssh服务PID kill -1 9861(pid) # 重新加载配置
-
kill -9:强制结束进程,会导致进程的临时文件不被删除,不优先使用
-
-
killall [子选项] [信号] 进程名(结束父进程,爷爷进程成为父进程)
-
-i:交互式,y/n询问
-
killall -i sshd
-
-
pkill [子选项] [信号] 进程名
-
-t -9 终端号:按终端号踢用户
-
-
-
进程优先级管理nice
-
优先级范围(-20,19),数值越小越高,默认为0
-
nice n N CMD:指定程序运行优先级为n
-
renice -n N PID:改变运行程序的优先级为-n
-
-
终端复用(重复使用)工具screen,该终端上命令脱离终端
-
用于执行大型操作防止中断
1. screen -S test # 新建一个叫test的会话 2. screen -ls # 列出当前用户所有会话 3. screen -r test # 回到test会话
-
-
time命令:查看命令执行时间
-
time CMD
time touch test.txt real 0m0.002s # 实际时间(睡眠状态、读取文件时不占用CPU) user 0m0.001s # 用户态CPU时间 sys 0m0.000s # 内核态CPU时间
-
-
限制普通用户开启进程数量
-
临时生效
-
ulimit -u 15:用户限制自己最多开启15个进程
-
ulimit -u:查看自己的限制数
-
-
永久生效
-
vim /etc/security/limits.d/20-nproc.conf
* soft nproc 4096 # 普通用户默认4096 root soft nproc unlimited # root不限制 ikun1 soft nproc 15 # 限制ikun1为15个
soft表示当前系统生效的设置值。hard表示系统能设定的最大值
nproc为操作系统级别对每个用户创建进程数的限制
-
-
压力测试工具stress
-
stress -c 20:开启20个进程
-
-
-
htop:彩色图形化top