当前位置: 首页 > news >正文

Linux 进程与服务管理~进程基础、进程查看、进程控制、服务管理、开机启动​​

在 Linux 系统中,进程与服务管理是运维和开发的核心技能之一。进程是程序运行的实例,服务是长期运行的后台进程(守护进程)。掌握进程与服务的管理方法,能有效排查系统问题、优化资源使用。以下从 ​​进程基础、进程查看、进程控制、服务管理、开机启动​​ 五大模块详细讲解,并结合实例说明。


​一、进程基础​

进程(Process)是操作系统分配资源的基本单位,每个进程有唯一的 ​​PID(进程ID)​​ 和 ​​PPID(父进程ID)​​。

​1. 进程状态​

Linux 进程状态通过 pstop 命令查看,常见状态如下:

状态符号全称说明
RRunning进程正在运行或等待运行(就绪状态)。
SSleeping进程因等待资源(如I/O、信号)进入睡眠状态(可中断睡眠:S;不可中断睡眠:D)。
TStopped进程被暂停(如通过 Ctrl+Z 发送 SIGTSTP 信号)。
ZZombie僵尸进程(子进程已结束,但父进程未回收其资源,占用 PID 资源)。
XDead进程已终止(极少见,通常立即被回收)。

​2. 父进程与子进程​

  • ​父进程(Parent Process)​​:创建子进程的进程(通过 fork() 系统调用)。
  • ​子进程(Child Process)​​:由父进程创建的进程(通过 exec() 系统调用执行新程序)。
  • ​PPID​​:父进程的 PID(通过 ps -o ppid,pid,cmd 查看)。

​3. 特殊进程​

  • ​init/systemd​​:系统启动后的第一个进程(PID=1),负责启动其他服务和进程。
  • ​守护进程(Daemon)​​:长期运行的后台服务(如 sshdnginx),通常以 d 结尾(如 syslogd)。

​二、进程查看​

查看进程是监控和管理进程的基础,常用工具包括 pstop/htoppstree

​1. ps:静态进程快照​

ps 命令用于获取当前进程的静态信息(某一时刻的状态),常用选项:

选项说明示例
aux显示所有用户的进程(a 所有用户,u 用户详细信息,x 包含无终端进程)ps aux
-ef显示完整格式(e 所有进程,f 树状结构)ps -ef
-o自定义输出列(如 pid,user,commps -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:实时动态监控​

tophtop 是交互式工具,实时显示进程的资源占用(CPU、内存、I/O 等)。

​(1) top 基本操作​
  • 启动:直接输入 top
  • 常用快捷键:
    • M:按内存占用排序(降序)。
    • P:按 CPU 占用排序(降序)。
    • k:终止进程(输入 PID 和信号,默认 SIGTERM)。
    • q:退出。
​(2) htop 增强功能​

htoptop 的增强版,支持鼠标操作、更友好的界面和更多统计信息(如磁盘 I/O、网络流量)。

​示例​
# 安装 htop(Ubuntu/Debian)
sudo apt install htop# 启动 htop
htop# 操作示例:
# - 鼠标点击列名排序(如 CPU% 列)。  
# - 按 F9 发送信号(选择 SIGKILL 强制终止进程)。  
# - 按 F10 退出。

​3. pstree:进程树状图​

pstree 以树状结构显示进程的父子关系,适合快速定位进程层级。

​常用选项​
选项说明示例
-p显示 PIDpstree -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(强制终止)。

​常用信号​
信号编号名称说明
15SIGTERM优雅终止(进程可清理资源后退出,推荐)。
9SIGKILL强制终止(进程无法捕获或忽略,直接终止)。
2SIGINT中断进程(如 Ctrl+C 发送此信号)。
18SIGCONT恢复暂停的进程(与 bg 配合)。
19SIGSTOP暂停进程(与 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(前台恢复)管理。

​操作流程​
  1. 运行任务后按 Ctrl+Z 暂停(发送 SIGTSTP 信号),任务进入停止状态(状态 T)。
  2. bg 将任务放到后台继续运行。
  3. 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:00journalctl -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 文件配置开机启动任务(需手动启用)。

​操作步骤​
  1. 编辑 /etc/rc.local 文件(需 root 权限):

    sudo nano /etc/rc.local
  2. exit 0 前添加启动命令(如启动自定义脚本):

    # 示例:启动 /opt/myapp 脚本
    /opt/myapp/start.sh &
  3. 确保 /etc/rc.local 有执行权限:

    sudo chmod +x /etc/rc.local
  4. 重启系统验证:

    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 进程与服务,保障系统稳定运行并优化资源使用。

http://www.dtcms.com/a/294312.html

相关文章:

  • 纯CPU场景下C++的分布式模型训练框架设计思路
  • 2025.7.20 文献阅读-基于深度神经网络的半变异函数在 高程数据普通克里格插值中的应用
  • go语言数据结构与排序算法
  • 【C++】C++ 的入门知识2
  • Android 持久化存储原理与使用解析
  • MATLAB | 绘图复刻(二十二)| 带树状图的三角热图合集
  • 个性化网页计数器
  • C 语言介绍
  • 【数据结构】二叉树的链式结构--用C语言实现
  • 嵌入式linux下的NES游戏显示效果优化方案:infoNES显示效果优化
  • 我用EV-21569-SOM评估来开发ADSP-21569(十三)-SigmaStudio Plus做开发(4)
  • Web前端开发:JavaScript遍历方法详解与对比
  • 安全防护-FCW
  • [HarmonyOS] HarmonyOS LiteOS-A 设备开发全流程指南
  • Linux第三天Linux基础命令(二)
  • 服务器对kaggle比赛的数据集下载
  • SAP-ABAP:SELECT语句验证字段和验证方法详解
  • OSPF路由协议——上
  • 28. 找出字符串中第一个匹配项的下标
  • vue3中el-table表头筛选
  • Flink 状态管理设计详解:StateBackend、State、RocksDB和Namespace
  • 谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】
  • 抖音集团基于Flink的亿级RPS实时计算优化实践
  • k8s pvc是否可绑定在多个pod上
  • 飞算JavaAI:从“工具革命”到“认知革命”——开发者如何借力AI重构技术竞争力
  • SpringBoot 内嵌 Tomcat 的相关配置
  • MySQL binlog解析
  • linux c语言进阶 - 线程,通信方式,安全方式(多并发)
  • Linux中常见的中英文单词对照表
  • 低代码中的统计模型是什么?有什么作用?