网站搭建工具的种类/新网站快速收录
进程管理
- 1、进程简介
- 2、进程管理(process)
- 2.1、目标
- 2.2、静态查看进程(ps)
- 2.2.1、进程排序
- 2.2.2、进程的父子关系
- 2.2.3、自定义显示字段
- 2.3、动态查看进程(top)
- 2.4、使用信号控制进程 kill
- 2.5、进程优先级(nice)
- 2.5.1、优先级范围和特性
- 2.5.2、启动具有不同 nice 级别的进程
- 2.5.3、更改现有进程的 nice 级别
- 3、作业控制 jobs(了解)
1、进程简介
进程:进程是已启动的可执行程序的运行实例
- 程序: 二进制文件
- 静态:/usr/bin/passwd , /usr/sbin/useradd
- 进程: 是程序运行的过程
- 动态:有生命周期及运行状态
进程有以下组成部分:
- 已分配内存的地址空间
- 安全属性,包括所有权凭据和特权
- 程序代码的一个或多个执行线程
- 进程状态
进程的生命周期
- 父进程复制自己的地址空间(fork)创建一个新的(子)进程结构
- 每个新进程分配一个,唯一的进程 ID (PID),满足跟踪安全性之需
- 任何进程都可以创建子进程
- 所有进程都是第一个系统进程的后代
Centos5/6 系统进程: init
Centos7 系统进程:systemd
进程状态
- 产生原因
- 在多任务处理操作系统中,每个CPU(或核心)
在一个时间点上只能处理一个进程 - 在进程运行时,它对CPU 时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变
- 常见进程状态
- R 运行
- S 睡眠
- T 停止的进程
- Z 僵尸进程
- X 死掉的进程
2、进程管理(process)
2.1、目标
了解进程的相关信息
- PID, PPID
- 当前进程状态
- 内存分配情况
- 占用 CPU 时间
- 用户 UID
- 进程名字
2.2、静态查看进程(ps)
❌ ps 不是 Photoshop, 而是 process status(进程状态)
🅰️ 语法
ps -aux
🅱️具体实例(静态查看进程并用管道命令过滤出前二行)
- 参数说明
- ps a 显示现行终端机下的所有程序
- ps u 以用户为主的格式来显示程序状况
- ps x 不以终端机来区分
# 查看进程状态的前二行
[root@localhost ~]# ps -aux | head -2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.4 0.2 128284 6980 ? Ss 09:34 0:04 /usr/lib/systemd/systemd
- USER — 运行进程的用户
- PID — 进程ID(靠 PID 杀死程序)
- %CPU — CPU 占用率
- %MEM — 内存占用率
- VSZ — 占用虚拟内存
- RSS — 占用实际内存
- TTY — 进程运行的终端
- STAT — 进程状态
- START — 进程的启动时间
- TIME — 进程占用 CPU 的总时间
- COMMAND — 进程文件,进程名
2.2.1、进程排序
🅰️ 语法
ps aux --sort %cpu
(以 CPU 占用升序排序)ps aux --sort -%cpu
(以 CPU 占用降序排序)
🅱️具体实例(升序排序)
[root@localhost ~]# ps aux --sort %cpu |tail -5
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 743 0.1 0.1 295564 5284 ? Ssl 09:34 0:03 /usr/bin/vmtoolsd
root 2256 0.1 0.8 608644 25200 ? Sl 09:35 0:03 /usr/bin/vmtoolsd -n vmusr
root 2267 0.1 2.2 1098688 69976 ? Sl 09:35 0:03 /usr/bin/gnome-software --gapplication-service
root 1 0.2 0.2 128284 6980 ? Ss 09:34 0:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2008 0.5 5.7 2736660 176204 ? Sl 09:35 0:09 /usr/bin/gnome-shell
2.2.2、进程的父子关系
🅰️ 语法
ps -ef
🅱️具体实例
- PID,PPID
- PPID 是程序的父进程
- 如下的 PID 是 4 的进程的父进程是 PID 为 2 的进程
[root@localhost ~]# ps -ef | head -5
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:34 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 09:34 ? 00:00:00 [kthreadd]
root 4 2 0 09:34 ? 00:00:00 [kworker/0:0H]
root 6 2 0 09:34 ? 00:00:00 [ksoftirqd/0]
2.2.3、自定义显示字段
🅰️ 语法
ps axo
🅱️具体实例(自定义查看进程的 USER,PID,PPID)
[root@localhost ~]# ps axo user,pid,ppid | head -5
USER PID PPID
root 1 0
root 2 0
root 4 2
root 6 2
2.3、动态查看进程(top)
🅰️ 语法
top
- 类似 window 端的任务管理器
🅱️具体实例(此处截取某一时刻的几行命令)
- 上部分
top - 10:16:43 up 42 min, 2 users, load average: 0.00, 0.01, 0.05
- 程序名-系统时间 运行时间 登录用户数 CPU 负载
Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
- 总进程数 运行数 睡眠数 停止数 僵死数
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- CPU 使用占比 us 用户 sy 系统 id空闲 wa 等待 hi 硬件 st 虚拟机
KiB Mem : 3060056 total, 1065028 free, 769316 used, 1225712 buff/cache
- 物理内存 total 总共 3G free 空闲 1G user 使用 700M cache 缓存硬盘内容 1G
KiB Swap: 2097148 total, 2097148 free, 0 used. 2119076 avail Mem
- 交换分区 total 总共 2G free 空闲 4G user 使用 0 avail 可用空间 2G
- 下部分
- PID,USER,%CPU,%MEM 略
- VIRT:virtual memory usage 虚拟内存
- RES:resident memory usage 常驻内存
- SHR:shared memory 共享内存
top - 10:16:43 up 42 min, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3060056 total, 1065028 free, 769316 used, 1225712 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 2119076 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 292 root 20 0 0 0 0 S 0.3 0.0 0:00.18 kworker/u256:3 2159 root 20 0 714332 14872 9708 S 0.3 0.5 0:00.60 gsd-color 1 root 20 0 128284 6980 4184 S 0.0 0.2 0:04.63 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
😃 top 常用命令(直接在键盘上面敲)
- h/? 获取帮助
- M 按内存的使用排序
- P 按CPU使用排序
- N 以PID的大小排序
- < 向前, > 向后
- z 设置彩色
😃 top 技巧
- 回车键立即刷新
top -d 1
每 1 s 刷新top -d 1 -p 10126
查看指定进程的动态信息top -d 1 -p 10126,1
查看 10126 和 1 号进程
2.4、使用信号控制进程 kill
🅰️ 语法
kill -l
(列出所有支持的信号)
[root@localhost ~]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
主要信号
- SIGHUP 重新加载配置
- SIGINT 键盘中断 Ctrl+C
- SIGQUIT 键盘退出 Ctrl+\ ,类似 SIGINT
- SIGKILL 强制终止,无条件
- SIGTERM 终止(正常结束),缺省信号
- SIGCONT 继续
- SIGSTOP 暂停
- SIGTSTP 键盘暂停 Ctrl+Z
🅱️ 自定义场景
- 创建二个文件并查看终端号
[root@localhost ~]# touch k1 k2
[root@localhost ~]# tty
/dev/pts/0
- 通过二个终端,分别用 vim 命令编辑二个文件
[root@localhost ~]# tty
/dev/pts/0
[root@localhost ~]# vim k1[root@localhost ~]# tty
/dev/pts/3
[root@localhost ~]# vim k2
- 通过另一个终端,查看 vim 的运行状态
[root@localhost ~]# tty
/dev/pts/1
[root@localhost ~]# ps aux | grep vim
root 3644 0.1 0.1 149804 5416 pts/3 S+ 10:46 0:00 vim k2
root 3645 0.1 0.1 149804 5436 pts/0 S+ 10:47 0:00 vim k1
root 3664 0.0 0.0 112824 976 pts/1 R+ 10:47 0:00 grep --color=auto vim
- 发送信号15 和信号 9 ,观察两个终端程序状态
- 可以发现一个正常终止(15),一个非法杀死(9)
[root@localhost ~]# ps aux | grep vim
root 3689 0.0 0.0 112824 976 pts/1 R+ 10:50 0:00 grep --color=auto vim
2.5、进程优先级(nice)
简介:Linux 进程调度及多任务,每个 CPU 在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序
2.5.1、优先级范围和特性
优先级图示
- 在 top 中显示的优先级有两个,PR 值和 nice 值
- NI:实际 nice 值
- PR(+20):将 nice 级别显示为映射到更大优先级队列,-20 映射到 0,+19 映射到 39
优先级特性
- nice 值越大: 表示优先级越低,例如 +19
- nice 值越小: 表示优先级越高,例如 -20
查看进程的 nice 级别(降序,优先级变高)
[root@localhost ~]# ps axo pid,nice --sort -nice | head -15PID NI32 19736 192276 192282 -2284 192289 -31 5724 11 02 06 07 -8 09 0
2.5.2、启动具有不同 nice 级别的进程
默认情况:启动进程时,通常会继承父进程的 nice 级别,默认为0
具体实例(将 sleep 的二个程序优先级均设置为 -10)
[root@localhost ~]# nice -n -10 sleep 7000 &
[7] 3872
[root@localhost ~]# nice -n -10 sleep 8000 &
[8] 3873
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 7000 3872 -10
sleep 8000 3873 -10
grep --color=auto sleep 3875 0
2.5.3、更改现有进程的 nice 级别
🅰️ 具体实例
- 创建一个睡眠程序
sleep 9000 &
- 查看优先级(0)
- 更改其优先级
renice -20 3975
(renice 优先级 进程号) - 查看优先级(-20)
[root@localhost ~]# sleep 9000 &
[9] 3975
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 9000 3975 0
grep --color=auto sleep 3987 0
[root@localhost ~]# renice -20 3975
3975 (进程 ID) 旧优先级为 0,新优先级为 -20
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 9000 3975 -20
grep --color=auto sleep 3990 0
3、作业控制 jobs(了解)
作业控制 jobs
- 作业控制是一个命令行功能,也叫后台运行
关键词介绍
- foreground(fg):前台进程:是在终端中运行的命令,占领终端
- background(bg):后台进程:没有控制终端,它不需要终端的交互
🅰️ 前台程序
- 执行后,终端不能执行其它命令
- ctrl + c 终止进程
[root@localhost ~]# sleep 2000
🅱️ 后台程序
- 运行后台程序
- 查询后台程序(jobs)
- 调动后台程序至前台(fg 作业数)
- 杀死后台程序(kill %作业数)
[root@localhost ~]# sleep 3000 &
[11] 4043[root@localhost ~]# jobs
[11] 运行中 sleep 3000 &[root@localhost ~]# fg 11
sleep 3000[root@localhost ~]# bg 11
[11]+ sleep 3000 &
[root@localhost ~]# jobs
[11] 运行中 sleep 3000 &
[root@localhost ~]# kill %11
[root@localhost ~]# jobs
[11] 已终止 sleep 3000