Linux 进程与服务管理~进程基础、进程查看、进程控制、服务管理、开机启动
在 Linux 系统中,进程与服务管理是运维和开发的核心技能之一。进程是程序运行的实例,服务是长期运行的后台进程(守护进程)。掌握进程与服务的管理方法,能有效排查系统问题、优化资源使用。以下从 进程基础、进程查看、进程控制、服务管理、开机启动 五大模块详细讲解,并结合实例说明。
一、进程基础
进程(Process)是操作系统分配资源的基本单位,每个进程有唯一的 PID(进程ID) 和 PPID(父进程ID)。
1. 进程状态
Linux 进程状态通过 ps
或 top
命令查看,常见状态如下:
状态符号 | 全称 | 说明 |
---|---|---|
R | Running | 进程正在运行或等待运行(就绪状态)。 |
S | Sleeping | 进程因等待资源(如I/O、信号)进入睡眠状态(可中断睡眠:S ;不可中断睡眠:D )。 |
T | Stopped | 进程被暂停(如通过 Ctrl+Z 发送 SIGTSTP 信号)。 |
Z | Zombie | 僵尸进程(子进程已结束,但父进程未回收其资源,占用 PID 资源)。 |
X | Dead | 进程已终止(极少见,通常立即被回收)。 |
2. 父进程与子进程
- 父进程(Parent Process):创建子进程的进程(通过
fork()
系统调用)。 - 子进程(Child Process):由父进程创建的进程(通过
exec()
系统调用执行新程序)。 - PPID:父进程的 PID(通过
ps -o ppid,pid,cmd
查看)。
3. 特殊进程
- init/systemd:系统启动后的第一个进程(PID=1),负责启动其他服务和进程。
- 守护进程(Daemon):长期运行的后台服务(如
sshd
、nginx
),通常以d
结尾(如syslogd
)。
二、进程查看
查看进程是监控和管理进程的基础,常用工具包括 ps
、top
/htop
、pstree
。
1. ps
:静态进程快照
ps
命令用于获取当前进程的静态信息(某一时刻的状态),常用选项:
选项 | 说明 | 示例 |
---|---|---|
aux | 显示所有用户的进程(a 所有用户,u 用户详细信息,x 包含无终端进程) | ps aux |
-ef | 显示完整格式(e 所有进程,f 树状结构) | ps -ef |
-o | 自定义输出列(如 pid,user,comm ) | ps -o pid,user,comm |
示例
# 查看所有进程(用户、PID、CPU/内存占用)
ps aux | head -n 5 # 输出前5行(包含标题)# 输出类似:
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# root 1 0.0 0.1 169344 13080 ? Ss 10:00 0:02 /sbin/init
# root 2 0.0 0.0 0 0 ? S 10:00 0:00 [kthreadd]# 查看特定用户的进程(如 user1)
ps -u user1# 查看父进程为 init(PID=1)的子进程
ps -o pid,ppid,cmd | grep ' 1 '
2. top
/htop
:实时动态监控
top
和 htop
是交互式工具,实时显示进程的资源占用(CPU、内存、I/O 等)。
(1) top
基本操作
- 启动:直接输入
top
。 - 常用快捷键:
M
:按内存占用排序(降序)。P
:按 CPU 占用排序(降序)。k
:终止进程(输入 PID 和信号,默认SIGTERM
)。q
:退出。
(2) htop
增强功能
htop
是 top
的增强版,支持鼠标操作、更友好的界面和更多统计信息(如磁盘 I/O、网络流量)。
示例
# 安装 htop(Ubuntu/Debian)
sudo apt install htop# 启动 htop
htop# 操作示例:
# - 鼠标点击列名排序(如 CPU% 列)。
# - 按 F9 发送信号(选择 SIGKILL 强制终止进程)。
# - 按 F10 退出。
3. pstree
:进程树状图
pstree
以树状结构显示进程的父子关系,适合快速定位进程层级。
常用选项
选项 | 说明 | 示例 |
---|---|---|
-p | 显示 PID | pstree -p |
-u | 显示所属用户 | pstree -u user1 |
-a | 显示完整命令行 | pstree -a |
示例
# 显示所有进程的树状结构(含 PID)
pstree -p# 输出类似:
# systemd(1)─┬─ModemManager(1000)─┬─{ModemManager}
# ├─NetworkManager(1001)─┬─{NetworkManager}
# └─sshd(1002)───sshd(1003)───bash(1004)───pstree(1005)# 显示用户 user1 的进程树
pstree -u user1 -p
三、进程控制
控制进程包括终止、暂停、后台/前台切换等操作。
1. kill
:发送信号终止进程
kill
命令通过发送信号(Signal)控制进程,默认发送 SIGTERM
(优雅终止),kill -9
发送 SIGKILL
(强制终止)。
常用信号
信号编号 | 名称 | 说明 |
---|---|---|
15 | SIGTERM | 优雅终止(进程可清理资源后退出,推荐)。 |
9 | SIGKILL | 强制终止(进程无法捕获或忽略,直接终止)。 |
2 | SIGINT | 中断进程(如 Ctrl+C 发送此信号)。 |
18 | SIGCONT | 恢复暂停的进程(与 bg 配合)。 |
19 | SIGSTOP | 暂停进程(与 Ctrl+Z 发送此信号)。 |
示例
# 终止 PID 为 1005 的进程(优雅终止)
kill 1005# 强制终止 PID 为 1006 的进程(无法响应 SIGTERM 时使用)
kill -9 1006# 向所有名为 "nginx" 的进程发送 SIGTERM
pkill nginx # 等价于 kill $(pgrep nginx)# 暂停 PID 为 1007 的进程(发送 SIGSTOP)
kill -19 1007# 恢复 PID 为 1007 的进程(发送 SIGCONT)
kill -18 1007
2. pkill
:按进程名终止进程
pkill
根据进程名(或部分匹配)发送信号,适合不知道 PID 但知道进程名的场景。
示例
# 终止所有名为 "chrome" 的进程
pkill chrome# 强制终止所有名为 "python3" 的进程
pkill -9 python3# 终止用户 user1 运行的 "bash" 进程
pkill -u user1 bash
3. bg
/fg
:后台/前台切换任务
在终端中运行长时间任务时,可通过 bg
(后台运行)和 fg
(前台恢复)管理。
操作流程
- 运行任务后按
Ctrl+Z
暂停(发送SIGTSTP
信号),任务进入停止状态(状态T
)。 - 用
bg
将任务放到后台继续运行。 - 用
fg
将任务调回前台。
示例
# 启动一个长时间任务(如 sleep 100)
sleep 100# 按 Ctrl+Z 暂停任务(输出:[1]+ Stopped sleep 100)# 将任务放到后台继续运行
bg %1 # %1 表示第一个任务(可通过 jobs 查看任务编号)# 查看后台任务(输出:[1]+ Running sleep 100 &)# 将任务调回前台
fg %1 # 恢复 sleep 100 前台运行(按 Ctrl+C 终止)
四、服务管理(systemctl)
systemctl
是 Linux 系统服务管理的核心工具(基于 systemd),支持启动、停止、重启、启用/禁用服务,以及查看状态。
1. 常用命令
命令 | 说明 |
---|---|
systemctl start 服务名 | 启动服务 |
systemctl stop 服务名 | 停止服务 |
systemctl restart 服务名 | 重启服务 |
systemctl reload 服务名 | 重新加载配置(不重启服务) |
systemctl enable 服务名 | 启用服务开机自启 |
systemctl disable 服务名 | 禁用服务开机自启 |
systemctl status 服务名 | 查看服务状态(运行/停止、启动时间、日志摘要) |
systemctl list-units | 列出所有已加载的单元(服务、定时器等) |
示例
# 启动 Nginx 服务
sudo systemctl start nginx# 停止 MySQL 服务
sudo systemctl stop mysql# 重启 Apache 服务
sudo systemctl restart apache2# 查看 SSH 服务状态
systemctl status sshd# 输出类似:
# ● sshd.service - OpenBSD Secure Shell server
# Loaded: loaded (/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
# Active: active (running) since Wed 2025-07-23 10:00:00 CST; 2h ago
# Docs: man:sshd(8)
# man:sshd_config(5)
# Main PID: 1008 (sshd)
# Tasks: 1 (limit: 4915)
# Memory: 2.1M
# CPU: 12ms
# CGroup: /system.slice/sshd.service
# └─1008 /usr/sbin/sshd -D# 启用 Nginx 开机自启
sudo systemctl enable nginx# 禁用 MySQL 开机自启
sudo systemctl disable mysql# 列出所有已启用的服务(过滤状态为 active)
systemctl list-units --type=service --state=active
2. 服务日志查看
通过 journalctl
查看服务的详细日志(与 systemctl
集成)。
常用选项
选项 | 说明 | 示例 |
---|---|---|
-u 服务名 | 过滤指定服务的日志 | journalctl -u nginx |
-f | 实时追踪日志(类似 tail -f) | journalctl -u nginx -f |
--since "时间" | 查看指定时间后的日志(如 2025-07-23 10:00:00 ) | journalctl -u sshd --since "10:00" |
示例
# 查看 Nginx 最近的日志
journalctl -u nginx# 实时追踪 SSH 服务日志
journalctl -u sshd -f# 查看 MySQL 服务在 2025-07-23 10:00 后的日志
journalctl -u mysql --since "2025-07-23 10:00:00"
五、开机启动管理
Linux 系统通过 systemctl
或传统 rc.local
文件管理服务开机自启。
1. systemctl
管理自启
现代 Linux 发行版(如 Ubuntu 16.04+、CentOS 7+)推荐使用 systemctl
管理开机自启。
操作示例
# 启用服务开机自启(等价于添加到 systemd 的启动目标)
sudo systemctl enable nginx# 禁用服务开机自启
sudo systemctl disable nginx# 查看服务是否开机自启
systemctl is-enabled nginx # 输出:enabled 或 disabled
2. rc.local
文件(传统方式)
部分发行版(如 Ubuntu 14.04、CentOS 6)仍支持通过 /etc/rc.local
文件配置开机启动任务(需手动启用)。
操作步骤
编辑
/etc/rc.local
文件(需root
权限):sudo nano /etc/rc.local
在
exit 0
前添加启动命令(如启动自定义脚本):# 示例:启动 /opt/myapp 脚本 /opt/myapp/start.sh &
确保
/etc/rc.local
有执行权限:sudo chmod +x /etc/rc.local
重启系统验证:
sudo reboot
综合实战示例
场景:服务器出现高 CPU 占用,需定位并终止异常进程,然后管理服务自启。
步骤1:定位高 CPU 进程
# 使用 top 查看 CPU 占用最高的进程
top# 输出类似(按 P 键按 CPU 排序):
# PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
# 1009 root 20 0 10.2G 5.1G 1.2G R 99.9 5.1 10:23.45 some_process# 发现 PID 1009 的进程占用 99.9% CPU,且状态为 R(运行)
步骤2:终止异常进程
# 发送 SIGTERM 优雅终止(若进程无响应则用 -9)
kill 1009# 验证是否终止(top 或 ps aux)
ps aux | grep 1009 # 无输出表示终止成功
步骤3:管理服务自启(避免再次启动)
# 假设异常进程是自定义服务 my_service,禁用其开机自启
sudo systemctl disable my_service# 查看状态确认
systemctl is-enabled my_service # 输出:disabled
总结
模块 | 核心内容 |
---|---|
进程基础 | 进程状态(R/S/T/Z)、父进程 PPID、子进程 PID、init/systemd 进程 |
进程查看 | ps aux (静态快照)、top /htop (实时监控)、pstree (树状结构) |
进程控制 | kill (发送信号)、pkill (按名终止)、bg/fg (后台/前台切换) |
服务管理 | systemctl (start/stop/restart/enable/disable)、systemctl status |
开机启动 | systemctl enable/disable (现代方式)、rc.local (传统方式) |
掌握这些知识后,可高效管理 Linux 进程与服务,保障系统稳定运行并优化资源使用。