Linux - 进程管理
1 基本介绍
在 LINUX 中,每个执行的程序都称为一个进程。每一个进程都分配一个 ID 号(pid,进程号)。
每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程
则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
2 显示系统执行的进程
2.1 基本介绍
ps
命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数
- ps的选项
- -a:显示当前终端的所有进程的信息
- -u:以用户的格式显示进程信息
- -x:显示后台进程运行的参数
2.2 ps详解
- 指令:ps -aux | grep xxx ,比如看看有没有sshd服务
- 指令说明
- system V:展示风格
- USER:用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用物理内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- TT:终端名称,缩写
- STAT :进程状态
- S:睡眠
- s:表示该进程是会话的先导进程
- N:表示进程拥有比普通优先级更低的优先级
- R:正在运行
- D:短期等待
- Z:僵死进程
- T:被跟踪或者被停止等等
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
- 示例:以全格式显示当前所有的进程,查看进程的父进程,如查看sshd的父进程信息:
ps -ef | grep sshd
ps -ef
:是以全格式显示当前所有的进程- -e:显示所有进程
- -f:全格式
2.3 进程的优先级
在Linux中,renice
命令用于修改已运行进程的优先级(即niceness值)。通过调整niceness值,可以控制进程的CPU调度优先级。
- 命令:renice -n <niceness> -p
- -n <niceness>:指定新的niceness值(范围:-20 到 19),其中niceness值越高,该进程的优先级越低,默认为0
- p <PID>:指定要修改的进程ID
- 示例:
- 修改单个进程的优先级,假设进程ID为1234,将其niceness值设置为5:
renice -n 5 -p 1234
- 输出样例:1234(process ID)old priority 0, new priority 5
- 修改多个进程的优先级,可以同时指定多个进程ID,用空格分隔:
renice -n 10 -p 1234 5678 91011
- 修改整个进程组的优先级,使用
-g
选项,指定进程组ID(PGID):renice - n 15 -g 1234
,这将修改进程组ID为1234的所有进程的niceness值 - 修改用户所有进程的优先级,使用
-u
选项,指定用户名或用户ID:renice -n 10 -u username
,这将修改该用户所有进程的niceness值
- 修改单个进程的优先级,假设进程ID为1234,将其niceness值设置为5:
注意
- 普通用户只能降低进程优先级(即设置niceness值为正数,如0 ~ 19)
- 只有root用户可以提高进程优先级(即设置niceness值为负数,如-20 ~ -1)
renice
只能修改已运行进程的优先级,如果需要启动时指定优先级,可以使用nice
命令,如nice - 10 ./script.sh
,以niceness=10启动进程
3 终止进程kill和killall
3.1 介绍
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完
成此项任务
3.2 基本语法
kill [选项] 进程号
(功能描述:通过进程号杀死/终止进程)killall 进程名
(功能描述:通过进程名杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)- 常用选项:
- -9:表示强迫进程立即停止
- 示例:强制杀死一个终端,指令 kill-9 bash对应的进程号
4 查看进程树 pstree
- 命令:
pstree [选项]
,可以更加直观的来看进程信息 - 常用选项:
- -p:显示进程的PID
- -u:显示进程的所属用户
5 服务(service)管理
5.1 介绍
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld , sshd
防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。
5.2 service 管理指令
- 命令:
service 服务名 [start | stop | restart | reload | status]
- 说明:在 CentOS7.0 后 很多服务不再使用 service ,而是 systemctl
- service 指令管理的服务在 /etc/init.d 查看:
ls -l /etc/init.d/
- 示例:
- 使用service查看,关闭,启动sshd服务
service sshd status
service sshd stop
service sshd stat
- 使用service查看,关闭,启动sshd服务
5.3 服务的运行级别(runlevel)
Linux 系统有 7 种运行级别(runlevel):常用的是级别 3 和 5
- 运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动
- 运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆
- 运行级别 2:多用户状态(没有 NFS),不支持网络
- 运行级别 3:完全的多用户状态(有 NFS),无界面,登陆后进入控制台命令行模式
- 运行级别 4:系统未使用,保留
- 运行级别 5:X11 控制台,登陆后进入图形 GUI 模式
- 运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动
开机的流程说明:
开机 --> BIOS --> /boot --> systemd进程1 --> 运行级别 --> 运行级别对应的服务
5.4 CentOS7 后运行级别说明
# 在 /etc/initab
# 进行了简化 ,如下:
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
init 0
# To view current default target, run:
systemctl get-default
# To set a default target, run:
systemctl set-default TARGET.target
5.5 systemctl 管理指令
- 基本语法: systemctl [start | stop | restart | status] 服务名
- systemctl 指令管理的服务在 /usr/lib/systemd/system 查看
5.5.1 systemctl 设置服务的自启动状态
systemctl list-unit-files [ | grep 服务名] (查看服务开机启动状态, grep 可以进行过滤)
systemctl enable 服务名 (设置服务开机启动)
systemctl disable 服务名 (关闭服务开机启动)
systemctl is-enabled 服务名 (查询某个服务是否是自启动的)
6 动态监控进程
6.1 介绍
top
命令与ps
命令很相似。它们都用来显示正在执行的进程。top和ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
6.2 基本语法
- 命令:
top [选项]
- 选项说明:
- -d秒数:指定top命令每隔几秒更新,默认是3秒
- -i:使top不显示任何闲置或僵死的进程
- -p:通过指定监控进程id来仅仅监控某个进程的状态
- 交互操作说明:
- P:以CPU使用频率排序,默认就是此项
- M:以内存的使用率排序
- N:以pid排序
- q:退出top
- 示例:
- 示例1:监控特定用户,比如监控tom用户
- top:输入此命令,按回车键,查看执行的进程
- u:然后输入"u"回车,再输入用户名,即可
- 示例2:终止指定的进程,比如我们要终止tom的登录
- top:输入此命令,按回车键,查看执行的进程
- u:然后输入"k"回车,再输入要结束的进程ID号
- 示例3:指定系统状态的更新的时间(每隔10秒自动更新),默认是3秒
- top -d 10
- 示例1:监控特定用户,比如监控tom用户
7 监控网络状态
7.1 查看网络情况netstat
- 命令:netstat [选项]
- 选项说明:
- -an:按一定顺序排列输出
- -p:显示哪个进程在调用
- 示例:查看服务名为sshd的服务信息
- netstat -anp | grep sshd