进程管理
进程管理
[TOC]
01.进程概述

- 内存越大,你同时运行的进程就越多!

pstree
以树形结构显示进程之间的关系
下载
yum install -y psmisc

使用

pstree -p
显示进程号

⚠️僵尸进程:

子进程比父进程先结束,而父进程没有回收子进程,也没有释放子进程占用的资源,此时子进程变为僵尸进程
- **僵尸进程:**挂了,不干活,但是依旧占用着这些资源
如何查看
top

ps aux | grep Z
Z就是僵尸进程的标志!

如何解决?
①找出僵尸进程的上级进程(父进程),结束掉即可

②如果上级进程为主进程(pid为1的进程,皇帝进程),则需要重新启动Linux系统.

孤儿进程:

父进程执行完毕,或者异常退出后,子进程仍然运行着.
-
那么这个子进程就变成了孤儿进程.
-
孤儿进程会被系统直接接管.
-
这个孤儿进程也还能用.
02.进程监控命令

①ps命令
ps -ef
[root@oldboy ~]#ps -ef | head -4
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:14 ? 00:00:02 /usr/lib/systemd/systemd
主进程PID=1只需记住systemd这个进程名字就够用了.
-
UID: 进程所属用户
-
PID: 进程id号,大部分都是随机的.

-
PPID: 父进程的id号
- pstree -p查看详细关系

- CMD: 进程名字
ps aux
虽然 ps -ef 与 ps aux 命令都能查看进程运行情况,但两者之间还是有一些细致区别.
输出示例:

进程状态:

| STAT基本状态 | 描述 | STAT状态+符号 | 描述 |
|---|---|---|---|
| R | 进程运行 | s | 父进程,管理进程 |
| S | 可中断睡眠 | < | 高优先级 |
| T | 进程被暂停 | N | 低优先级 |
| D | 不可中断睡眠 | + | 进程运行在前台 |
| Z | 僵尸进程 | l(小写) | 进程是多线程的 |
**I** Idle(空闲)
**意味着该进程(通常是内核线程)**正在等待事件发生它不会消耗 CPU 时间,但处于“准备响应”的状态.- **进程名带 [ ] 都是些Linux内核进程 **

- S(可中断睡眠)和Ss就是top中的sleeping进程!

- T(被挂起的进程)就是top中的stopped进程!

- S+前台运行


- 多线程得需要软件支持!
使用tar打包文件时,另一个窗口可以通过ps aux查看状态,由S+,R+变为D+[root@lzy ~]# ps axu|grep tar|grep -v greproot 14289 2.6 0.1 124268 1888 pts/2 S+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v greproot 14289 2.7 0.2 124380 2240 pts/2 R+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v greproot 14289 2.9 0.2 124916 2724 pts/2 D+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var常见的进程状态:
-
R+ 前台运行中的进程
-
Ss 可中断的管理进程
-
S< 可中断的高级进程
-
Ssl 可中断的多线程的管理进程
-
D 不可中断的IO进程
-
Z 僵尸进程
两个ps命令的区别:
-
在 ps -ef 中,**查看所有进程及其详细信息,并显示父进程 ID.
-
在 ps aux 中, 包含了%CPU和%MEM列以及进程的状态信息,
-
重点在资源使用情况,像CPU%和内存%的占用率等等.
**ps aux 没有 - **
🧣pgrep
# 按条件查找进程
(1)列出包含sshd的PID和进程名[root@Rocky10 home]# pgrep -l sshd1405 sshd1452 sshd-session1913 sshd-session
(2)列出root用户的所有进程'root用户的进程太多了,不建议查看root用户的!'[root@Rocky10 home]# pgrep -u root12
(3)列出指定终端的进程root@Rocky10:~# whoroot pts/0 2026-03-06 09:12 (10.0.0.1)root seat0 2026-03-06 14:16 (login screen)root tty2 2026-03-06 14:16 (tty2)[root@Rocky10 home]# pgrep -t pts/01919# 这个pts是伪终端,也就是Xshell连接的那个!'你一看这个终端登录了,之后通过查看登录终端的进程,可以指定杀它'# 按的是终端查看,而不是用户root@Rocky10:~# kill -9 1919root@Rocky10:~# whoroot seat0 2026-03-06 14:16 (login screen)root tty2 2026-03-06 14:16 (tty2)
[root@Rocky10 home]# Connection closing...Socket close.# 我们回到Xshell,连接中断!②top命令

-
它是个交互式的命令
- 下面有它的快捷键
-
可以非交互式
输出完之后,自动退出
- **top -bn1**
- -b 非交互式模式
- -n 输出的次数为1次-
可以展示系统负载,进程,CPU,内存…
-
类似于Windows的任务管理器
什么是中断?
中断就是终止当前在做的事情 去执行另一段程序
会保留现场,执行的那段程序做完之后会再回来执行刚来尚未完成的部分

us和sy
**us用户态:** 用户执行命令占用CPU百分比yum -y install wget
**sy内核态:** 硬件执行占用CPU百分比
用户态:**由服务通知CPU**没有办法直接调用硬件**内核态:****CPU调用我们的内核驱动****调用磁盘读取内容**快捷键

-
按完z后,紧跟着的就是x
-
和 < 向左向右

- 1可以查看多个CPU核心数

htop
需要提前配置好epel源,然后安装即可

yum -y install htop

- 这个功能非常齐全.
取僵尸进程个数
利用到非交互模式
未来想要取top命令的结果,指标,需要让top命令运行在非交互模式

top -bn1 | awk ‘NR==2{print (NF-1)}’
-
top -bn1
- -b 非交互式模式- -n 输出的次数为1次 -
这里利用 ” “双引号替代 ,逗号 进行分隔.
-
NR==2 取第二行
③lsof
用于列出当前系统中被进程打开的文件**
详细内容请看磁盘相关案例
🧣负载高?
-
负载高和系统的可运行状态(R,S)和不可中断(D)(读写IO)的平均进程数有关.
-
系统的繁忙程度
-
越接近CPU核心数,系统的负载越高.
-


-
如果是CPU导致,是us还是sy,上面有详细的区分
-
IO高用iotop -o进一步排查
iotop -o
显示正在读写的进程
yum -y install iotop

03.ps常见操作:
①过滤出进程信息:
ps -ef | grep ‘crond’
ps aux | grep ’crond‘

ps -ef | grep ’crond‘ | grep -v ’grep‘
-v 排除自己的grep进程
ps -ef | grep ’crond‘ | grep -v ’grep‘ | wc -l
并统计进程的数量


- 尽可能的详细,排除掉没有用的信息!

②按照树形结构查看进程信息



③显示某几列


- 逗号隔开!

不显示标题


④取出某个进程的指定列

⑤取出所有进程中内存使用率最高的前5
使用sort进行排序

ps aux —no-heading | sort -rnk4 | head -5
-
k4 按第四列内存使用率排序
-
rn 按数字,倒序排序
-
—no-heading 不显示标题
-
head -5 取前五名

ps aux —no-heading —sort=-%mem | head -5
-
—sort 默认是升序排
- 指标前面加 - 减号表示降序排序
04.后台管理
概述
前台
前台运行,当前正在用的软件或进程.
-
ps aux进程状态中,带有+,表示前台运行的进程.
-
Xshell远程连接,敲的命令都是前台命令.



- **断开连接后,**前台命令结束,进程结束.**- 所以一些临时的操作,就给前台了.
后台
后台运行,“默默无闻”的运行.
-
大部分软件和进程都是在后台运行.
-
ps aux进程状态中,大部分都不带+,后台运行
-
即使Xshell连接断开,也会持续运行.
root@rocky10:~# vim 1.shroot@rocky10:~# cat 1.sh#! /bin/bashwhile :do date >> /root/1.txt sleep 1doneroot@rocky10:~# > /root/1.txt
运行./1.sh,然后关闭终端,然后cat /root/1.txt,验证脚本停止运行,没有新的写入
运行./1.sh &,然后关闭终端,然后cat /root/1.txt,验证脚本停止运行,没有新的写入# 这个是把它放在后端运行了!进入后台运行
①⭐&方法
最常用的方法
-
隔一个空格再去接&
-
jobs可以查看手动进入到后台的进程
[root@oldboy ~]#sleep 999 &
[1] 2781
[1]表示手动进入到后台的第1个进程 2781表示进程号
[root@oldboy ~]#sleep 999 &
[2] 2782
这个同理为第二个…
[root@oldboy ~]#jobs
[1]- Running sleep 999 &
[2]+ Running sleep 999 &
jobs # 列出当前shell的所有后台作业jobs -l # 显示详细信息,包括PID'主要是这个PID'[root@Rocky10 ~]# sleep 33 &[1] 4190[root@Rocky10 ~]# jobs[1]+ Running sleep 33 &[root@Rocky10 ~]# jobs -l[1]+ 4190 Running sleep 33 &②nohup命令和&方法

- 会在当前目录生成一个nohup.out,默认保存在这里!

-
想要输出到其他文件中
-
nohup 命令 >新的文件 &
-
覆盖
-
追加
-
-
③ctrl + z
一般很少使用
并非撤销键
-
让当前运行的命令或者服务进入后台挂起
- **并非后台运行**,**而是挂起** -
被暂停,对应ps aux进程状态的T

[root@Rocky10 ~]# jobs[1]+ Running sleep 33 &`%n`(n为jobs命令显示的作业号)
bg - 后台继续运行bg # 恢复最近停止的后台作业bg %1 # 恢复作业号为1的后台作业
fg - 前台运行作业fg # 将最近的后台作业调到前台fg %1 # 将作业号1调到前台-
bg让“挂起暂停”的进程和服务,跑到后台运行
- 两者结合相当于&,直接跑后台运行.

- 如果误触 ctrl + z 可以通过 fg 再次回到前台运行.

④⭐screen
一般我们使用&,nohup方法让命令,服务进入后台运行,但是可能不稳定
-
它是较为稳定的去运行后台的一些指令
-
**不运行大型的的服务,只是一些简单指令命令.
**原理:****screen 本身并不会自动把里面的命令变成 “后台进程” .****它只是提供了一个可脱离的虚拟终端环境.**在 screen 会话里运行的命令,**默认仍然是前台进程(相对于那个虚拟终端而言)**.**只是相对我们的屏幕终端,进入到了screen里面的虚拟终端“后台”**
创建一个screen会话,只要会话还在,里面的命令就不会断;
即使exit退出只要screen -ls还能查到会话
命令就不会断- 安装screen
yum -y install screen

- 创建命名会话
[root@oldboy ~]#screen -S test
-
-S(大写)新建会话
-
直接进入到会话里面
-
执行命令sleep 999
-
ctrl+a+d脱离当前会话
-
-
终端会显示:[detached from 1580.test]
- 1580是会话ID- -S新建的会话名test- 用 . 点隔开- **detached:安全可恢复**
- 退出会话
-
ctrl+a+d脱离当前会话
- 正常退出,后面可以-r恢复
-
强制退出,彻底结束
-
后面-ls查不到这个会话,关闭了这个会话
-
ctrl+d
-
exit
-
-
ctrl+c是中止停止运行
- 直接把进程关闭了
-
- 查看所有的会话
[root@oldboy ~]#screen -ls
There are screens on:
1876.*oldboy* **(Detached)**
1580.*test* **(Attached)**2 Sockets in /run/screen/S-root.
-
前面是会话ID
-
后面是-S创建的会话名

这个是默认screen进来.
- 两种状态详解
✅ (Detached):安全可恢复
-
表示该 screen 会话,当前没有被任何终端连接.
-
它在后台安静运行,处于空闲状态.
-
你可以直接用 screen -r 恢复它,没有任何风险.
screen -r 会话名
screen -r 会话ID
✅ 这是最常见的理想状态 —— 断开后想回来继续工作.
⚠️ (Attached):已被占用
-
表示该 screen 会话,当前正被另一个终端(或 SSH 会话)连接着.
-
**此时直接 screen -r 会失败
如何处理这种状态??
screen -dr 会话名或会话ID
-
-d:先将该会话从“Attached”状态 强制 detach
-
-r:然后立即 attach 到当前终端
💡 这是最常用、最安全的做法(前提是你确认没人正在用).
05.杀手三剑客
kill
常用
后跟进程id,结束进程.
-
默认什么也不跟,就是kill -15
-
平滑杀死进程、内存中的数据会写入到磁盘中.不容易丢数据
- 等同于 systemctl stop
-
kill两次
-
出现 No such process
- 说明成功结束

kill -1
重新加载进程 不会和用户断开
- 等同于systemctl reload
kill -9
强制结束
-
可能正在传输数据,然后就直接被杀死了.
-
①强制结束后,进程可能起不来了,“受打击了”
-
②内存数据容易丢失
-
-
尽量少用kill -9
pkill
慎用,很少用
后跟进程名字
- 支持正则、模糊匹配.(如 pkill fire 能杀 firefox)


killall
**后跟进程名,全名精准匹配
-
相当于grep -w
- killall firefox 才能杀 firefox
⚠️ 特别警告:
- 在 macOS 或 BSD 系统中,killall 的作用是“杀死所有进程”(用于关机),不是按名字杀进程!
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!




