Linux 新手村Linux 新手村
🏠 首页
📖 教程
  • Linux 官网
  • Ubuntu 官网
  • CentOS 官网
🏠 首页
📖 教程
  • Linux 官网
  • Ubuntu 官网
  • CentOS 官网
  • 🚀 入门篇 - 欢迎来到 Linux 世界

    • 📚 长安的教程导航
    • 🐧 什么是 Linux?
    • 💿 安装 Linux
    • 🎉 首次开机
  • 🎯 基础篇 - 必备生存技能

    • ⌨️ 基础命令
    • 🗂️ 文件系统
    • 📝 文件操作
    • 👥 用户与权限
  • ⚔️ 进阶篇 - 成为高手之路

    • ⚔️ Vim 编辑器
    • 🤖 Shell 脚本
    • ⚙️ 进程与服务
    • 🌐 网络基础
  • 🏆 高级篇 - 突破自我

    • 💡 高级技巧
    • 🔧 故障排查
    • 🎭 日常案例与血泪教训

⚙️ 进程与服务

大家好,我是长安!这一章来讲讲 Linux 的进程和服务管理,这是运维必备技能。

🎯 本章目标

跟着长安读完这一章,你将学会:

  • 什么是进程,如何查看和管理
  • 前台和后台运行程序
  • 系统服务的管理(systemctl)
  • 定时任务的设置

🔄 什么是进程?

进程(Process)就是运行中的程序。

比如:

  • 你打开一个浏览器 → 创建了一个进程
  • 你运行一个命令 → 创建了一个进程
  • 一个程序可以有多个进程

每个进程都有一个唯一的 PID(Process ID,进程号)。

👀 查看进程

ps - 进程快照

# 查看当前终端的进程
ps

# 查看所有进程(常用)
ps aux

# 查看所有进程(另一种格式)
ps -ef

# 查看指定进程
ps aux | grep nginx

# 显示进程树
ps -ef --forest

ps aux 输出解释:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 168936 11904 ?        Ss   10:00   0:01 /sbin/init
xiaoming  1234  0.5  2.3 987654 45678 pts/0    S    10:05   0:30 /usr/bin/vim
│          │    │    │     │      │    │        │     │       │    │
│          │    │    │     │      │    │        │     │       │    └── 命令
│          │    │    │     │      │    │        │     │       └── 运行时间
│          │    │    │     │      │    │        │     └── 启动时间
│          │    │    │     │      │    │        └── 状态
│          │    │    │     │      │    └── 终端
│          │    │    │     │      └── 物理内存
│          │    │    │     └── 虚拟内存
│          │    │    └── 内存占用 %
│          │    └── CPU 占用 %
│          └── 进程 ID
└── 用户

进程状态(STAT)含义:

状态含义
R运行中(Running)
S休眠中(Sleeping)
D不可中断休眠
T已停止(Stopped)
Z僵尸进程(Zombie)
<高优先级
N低优先级
s会话领导者
+前台进程

top - 实时监控

# 启动 top
top

top 界面说明:

top - 10:30:00 up 2 days,  3:15,  2 users,  load average: 0.08, 0.15, 0.10
Tasks: 256 total,   1 running, 255 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  1.0 sy,  0.0 ni, 96.5 id,  0.1 wa,  0.0 hi,  0.1 si
MiB Mem :  15896.4 total,   8234.2 free,   4562.1 used,   3100.1 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  10834.3 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 xiaoming  20   0  987654  45678  12345 S   5.0   2.3   0:30.25 vim

top 快捷键:

按键功能
q退出
P按 CPU 排序
M按内存排序
k杀死进程(输入 PID)
1显示每个 CPU
h帮助

htop - 更好看的 top

# 安装
sudo apt install htop -y

# 运行
htop

htop 有彩色界面,支持鼠标,更易用!

pgrep - 按名称查找进程

# 查找 nginx 进程的 PID
pgrep nginx

# 显示完整命令
pgrep -a nginx

# 按用户查找
pgrep -u xiaoming

🎯 管理进程

kill - 杀死进程

# 优雅终止进程(发送 SIGTERM)
kill PID
kill 1234

# 强制杀死进程(发送 SIGKILL)
kill -9 PID
kill -KILL PID

# 按名称杀死进程
killall nginx
pkill nginx

# 杀死用户的所有进程
killall -u username

常用信号:

信号数字含义
SIGTERM15优雅终止(默认)
SIGKILL9强制杀死
SIGHUP1重新加载配置
SIGSTOP19暂停进程
SIGCONT18继续进程

nice/renice - 调整优先级

# 以低优先级运行命令(nice 值越高,优先级越低)
nice -n 10 ./my_script.sh

# 调整运行中进程的优先级
renice 10 -p 1234

🎭 前台和后台

前台运行(默认)

# 前台运行,会占用终端
sleep 100

后台运行

# 方法 1:命令末尾加 &
sleep 100 &

# 方法 2:把前台任务放到后台
# 先按 Ctrl+Z 暂停,再用 bg 放后台
Ctrl+Z
bg

# 查看后台任务
jobs

# 把后台任务调到前台
fg
fg %1    # 指定任务号

nohup - 忽略挂断信号

# 即使终端关闭,程序也继续运行
nohup ./my_script.sh &

# 输出默认保存到 nohup.out
# 也可以重定向
nohup ./my_script.sh > output.log 2>&1 &

screen/tmux - 终端复用

# 安装 screen
sudo apt install screen -y

# 创建新会话
screen -S my_session

# 在会话中运行程序...

# 分离会话(程序继续运行)
Ctrl+A, D

# 查看所有会话
screen -ls

# 重新连接会话
screen -r my_session

🛠️ 系统服务管理

现代 Linux 使用 systemd 管理服务。

systemctl 常用命令

# 启动服务
sudo systemctl start nginx

# 停止服务
sudo systemctl stop nginx

# 重启服务
sudo systemctl restart nginx

# 重新加载配置(不中断服务)
sudo systemctl reload nginx

# 查看服务状态
sudo systemctl status nginx

# 设置开机自启
sudo systemctl enable nginx

# 取消开机自启
sudo systemctl disable nginx

# 查看是否开机自启
sudo systemctl is-enabled nginx

# 查看所有服务
sudo systemctl list-units --type=service

# 查看运行中的服务
sudo systemctl list-units --type=service --state=running

查看服务状态输出

$ sudo systemctl status nginx

● nginx.service - A high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
     Active: active (running) since Mon 2024-01-01 10:00:00 CST
   Main PID: 1234 (nginx)
      Tasks: 2 (limit: 4915)
     Memory: 5.3M
        CPU: 23ms
     CGroup: /system.slice/nginx.service
             ├─1234 "nginx: master process"
             └─1235 "nginx: worker process"
  • loaded - 服务配置已加载
  • enabled - 开机自启已启用
  • active (running) - 服务正在运行

查看服务日志

# 查看服务日志
sudo journalctl -u nginx

# 实时查看
sudo journalctl -u nginx -f

# 查看最近的日志
sudo journalctl -u nginx --since "1 hour ago"

⏰ 定时任务

crontab - 定时执行

# 编辑当前用户的定时任务
crontab -e

# 查看当前用户的定时任务
crontab -l

# 删除所有定时任务
crontab -r

crontab 格式

┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 日期 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期 (0 - 7) (0和7都是周日)
│ │ │ │ │
* * * * * command

示例

# 每分钟执行
* * * * * /path/to/script.sh

# 每小时执行(整点)
0 * * * * /path/to/script.sh

# 每天凌晨 3 点执行
0 3 * * * /path/to/script.sh

# 每周一凌晨 3 点执行
0 3 * * 1 /path/to/script.sh

# 每月 1 号凌晨 3 点执行
0 3 1 * * /path/to/script.sh

# 每 5 分钟执行
*/5 * * * * /path/to/script.sh

# 每天 8 点到 18 点,每小时执行
0 8-18 * * * /path/to/script.sh

# 工作日(周一到周五)上午 9 点执行
0 9 * * 1-5 /path/to/script.sh

定时任务小技巧

# 任务输出保存到日志
0 3 * * * /path/to/script.sh >> /var/log/myscript.log 2>&1

# 不要任何输出
0 3 * * * /path/to/script.sh > /dev/null 2>&1

# 使用环境变量
PATH=/usr/local/bin:/usr/bin:/bin
0 3 * * * /path/to/script.sh

at - 一次性定时任务

# 在指定时间执行(只执行一次)
at 10:00
> /path/to/script.sh
> Ctrl+D

# 查看待执行的任务
atq

# 删除任务
atrm 任务号

📊 系统资源监控

内存监控

# 查看内存使用
free -h

# 持续监控
watch -n 1 free -h

磁盘监控

# 磁盘使用情况
df -h

# 目录大小
du -sh /var/log

# 磁盘 I/O
iostat

网络监控

# 网络连接
netstat -tuln
ss -tuln

# 网络流量
iftop    # 需要安装

# 网络统计
netstat -s

📝 本章小结

常用命令速查

操作命令
查看进程ps aux
实时监控top / htop
杀死进程kill PID / kill -9 PID
后台运行command &
不挂断运行nohup command &
启动服务sudo systemctl start xxx
停止服务sudo systemctl stop xxx
服务状态sudo systemctl status xxx
编辑定时任务crontab -e

服务管理速记

sudo systemctl start/stop/restart/status 服务名
sudo systemctl enable/disable 服务名

cron 时间速记

* * * * *  每分钟
0 * * * *  每小时
0 0 * * *  每天
0 0 * * 0  每周日
0 0 1 * *  每月1号

🚀 下一步

进程和服务掌握了,接下来跟着长安学习 网络基础!

—— 编程指南社区 · 长安

最后更新: 2025/12/1 15:56
Prev
🤖 Shell 脚本
Next
🌐 网络基础