Lazy loaded image
运维管理
Linux 进程、任务及服务管理
Words 2153Read Time 6 min
2025-9-29
2025-11-10
date
related_level
slug
linux_proc
type
Post
relate_date
summary
后台执行、jobs/bg/fg/disown 管理任务,ps/top/pstree 管理进程,systemctl 管理服务
status
Published
tags
系统管理
category
运维管理
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
 

Linux 任务管理

  • 在指令末尾添加 & 可以使指令在后台执行
    • & 结合 nohup 指令可以让指令脱离当前终端运行,不受终端 SIGNUP 信号影响
      • nohup command [options] [arguments] &
      • 可以进一步将输出重定向至特定文件
        • nohup ./myscript.sh > output.log &
jobs 查看任务列表
  • jobs -l
    • 提供详细信息
  • jobs -p
    • 仅显示进程组 PGID
  • jobs -r
    • 仅显示运行中的任务
  • jobs -s
    • 仅显示暂停的任务
  • Ctrl + Z 暂停任务
  • Ctrl + C 终止任务
恢复暂停任务并在后台运行
  • bg
  • bg [job_id...]
    • 恢复运行指定任务
  • bg [job_id...]
    • 恢复运行指定任务
将后台任务切换到前台执行
  • fg
  • fg [job_id...]
disown 从任务列表中移除任务,或使任务在终端关闭后不会被终止
  • disown -a
    • 移除所有任务(终端关闭时仍会被终止)
  • disown -r
    • 移除正在运行的任务
  • disown %<num>
    • 移除特定任务编号的任务
 

Linux 进程管理

top 系统实时监控工具
参考资料
  • 输入 top 即可
    • top -p 显示指定进程信息
  • 基本交互
    • h:显示帮助信息,列出可用的快捷键
    • W:将当前设置写入 ~/.toprc 文件
    • q:退出 top
    • k:终止选定的进程
显示交互
  • Space:手动刷新屏幕
  • J:切换文本对齐模式
  • 1:切换到全局CPU使用率视图
  • t:切换进程和CPU信息显示模式
  • m:切换内存信息显示模式
    • e:更改下方列表的内存显示单位
  • V:切换是否以进程树的形式显示
  • c:切换是否显示完整指令
  • S:切换到累计时间模式
  • b:高亮正在运行的进程
  • x:高亮排序列
    • Shift+<Shift+>:左右切换当前排序列
    • Shift+P:按CPU使用量排序进程
    • Shift+M:按内存使用量排序进程
    • Shift+T:按CPU使用时间排序进程
    • Shift+N:按PID(进程ID)排序进程
列表筛选
  • i:忽略闲置进程和僵尸进程
  • n:限制进程显示数量,0为不限制
  • u:筛选特定用户进程
查看进程树
  • pstree
查看进程列表
  • ps
  • 查看全部进程 ps aux
  • 查看指定用户 ps -u username
  • 查看指定进程 ps -p pid -o pid,ppid,cmd,%cpu,%mem
  • 查看特定终端下的所有进程 ps -ft <tty>
查找进程ID
pidof <name> 返回进程名称完全匹配的进程 PID
pgrep [options] <pattern>
  • 返回进程名称满足匹配规则的进程 PID 或其他信息
  • -f 同时匹配命令行
  • -U 限制 UID
  • -l 列出进程名称
  • -a 列出进程详细信息
  • ps aux | grep <pattern>
终止进程
kill 向进程发送信号
kill [-s signal] pid...
  • 向 PID 为指定 PID 的进程发送指定信号
  • -s 指定发送的信号,默认为 TERM(15) 终止信号
kill -l [signal]
  • 列出信号名称列表
Linux 常见 signal 信号列表
  • 终止 SIGTERM (15)
  • 强制终止 SIGKILL (9)
    • 注意,可能导致数据不一致
  • 挂起 SIGHUP (1)
  • 中断 SIGINT (2)
    • 相当于 Ctrl + C
  • 退出 SIGQUIT (3)
    • 相当于 Ctrl + \,类似于中断但会生成一个核心转储文件以供调试
  • 停止 SIGSTOP (19)
    • 相当于 Ctrl + Z
  • 继续 SIGCONT (18)
  • killall [-s signal] pname
    • 向名称为指定 pname 的所有进程发送指定信号
  • pkill [options] pattern
    • 终止进程名称满足匹配规则的进程
  • top 查看系统实时监控
    • k 终止进程,通过输入 PID 指定进程,可以指定信号类型
 
 

Linux 服务管理

  • 绝大多数 Linux 发行版的 init 方案是 systemd,其管理系统服务的命令是 systemctl
    • systemctl 命令通常需要 root 权限
    • systemctl --user 用于管理用户级别的服务,无需 root 权限
systemd 是为 Linux 操作系统提供一系列系统组件的软件套件,替代了原本的 System V
  • systemd 将 service、target(执行模式)、mount、timer、snapshot、path、socket、swap 等统一抽象为 Unit,提供了一种灵活的方式来定义和组织系统的各种资源
  • systemd 提供了积极的并行化功能,使用 socket 和 D-Bus 激活来启动服务
  • systemd 提供按需启动守护进程(deamon)
  • systemd 实现了基于事务依赖性的服务控制逻辑
  • systemd 使用Linux控制组(cgroups)替代进程ID跟踪进程,维护装载点和自动装载点
  • 等等……
查看正在运行的服务列表
  • systemctl list-units --type=service
    • --all 查看全部(含已加载但未活动)服务
  • systemctl list-units-file --type=service
    • 查看全部可用的 systemd 服务文件
查看服务当前状态
  • systemctl status <service-name>
查看服务详细信息
  • systemctl show <service-name>
启用/禁用服务
  • systemctl enable <service-name>
  • systemctl disable <service-name>
启动/关闭/重启服务
  • systemctl start <service-name>
  • systemctl stop <service-name>
  • systemctl restart <service-name>
重新加载 systemd 配置
  • sudo systemctl daemon-reload
创建自定义服务
编辑服务文件
  • vim /etc/systemd/system/test-app.service
重新加载systemd配置
  • sudo systemctl daemon-reload
 

systemd unit 资源管理

参考资料
  • systemd 把系统资源统一抽象为 Unit 这一基本单元
systemctl -t help 列举当前系统可用 Unit 类型
  • .target:用于定义一个抽象的目标单元,可以包含其他单元,用于组织和管理资源
    • systemctl get-default 查看启动时的默认 Target
  • .device:定义硬件设备,可以包含设备的属性和事件
  • .mount:定义装载点,指定文件系统如何挂载到特定目录
  • .automount:自动挂载点,在访问时自动挂载文件系统
    • 用于懒加载文件系统,以减少资源消耗
  • .swap:对交换设备或文件的信息进行编码,用于由系统控制和监督的内存分页
  • .service:用于定义和管理系统服务
    • 包括服务的描述、启动、停止、重启规则以及依赖关系
  • .slice:定义进程组,用于分组和限制资源使用,可以用来控制进程的资源分配和优先级
  • .scope:用于将一组进程分组到一个范围中,以便进行资源控制和管理
    • 与 .service 单元不同,.scope 单元管理外部创建的进程,并且不单独分出进程
    • 通常是由 systemd 自动生成的,用于将一组相关的子进程分组
  • .path:对 systemd 监控的路径信息进行编码,用于基于路径的激活
  • .socket:用于定义进程间通信的 socket,可以监听网络连接,等待客户端连接
  • .busname:用于创建 D-Bus 系统总线名称,以便进程可以通过 D-Bus 通信
  • .snapshot:用于创建和管理 systemd 单元的快照
  • .timer:定义定时器,可以定期触发其他 Unit 的启动,类似于 cron 任务
systemctl list-units [PATTERN...] 查看系统 Unit 列表
  • systemctl list-units --all --state=inactive
    • 列出所有未运行的 Unit
  • systemctl list-units --failed
    • 列出加载失败的 Unit
  • systemctl list-units --type=service
    • 列出服务类型的 Unit
systemctl status 查看 Unit 状态
  • systemctl -H root@rhel7.example.com status httpd.service
    • 显示远程主机的某个 Unit 的状态
systemctl list-dependencies 查看 Unit 依赖
  • 默认不显示 target 类型
  • systemctl list-dependencies --all nginx.service
    • 显示包含 target 类型
systemctl show 查看 Unit 参数
  • systemctl show -p CPUShares httpd.service
    • 查看 Unit 指定属性的参数
  • sudo systemctl set-property httpd.service CPUShares=500
    • 设置 Unit 指定属性的参数
unit 配置文件
参考资料
unit 配置文件常见位置
  • /etc/systemd/system/
  • /run/systemd/system/
    • 运行时
  • /usr/lib/systemd/system/
systemctl list-unit-files 查看 Unit 配置文件
  • systemctl list-unit-files --type=service
    • 列出服务类型的 Unit 配置文件
  • systemctl cat 查看 Unit 配置文件内容
  • sudo systemctl daemon-reload 重新加载 systemd 配置文件
上一篇
通过 helm-diff 插件进行 helm release 版本变更对比
下一篇
Go 语言学习笔记

Comments
Loading...