教程
🐧

Linux 操作系统

从 Linux 安装、命令、权限到网络、服务、防火墙与容器化的系统管理实战。

Linux 进程管理:进程查看、控制与 cron 定时任务

程序跑起来叫进程。这篇讲清 Linux 下怎么查看进程、发送信号、杀进程,以及用 cron 配置定时任务。

· 更新于 2026-07-18 阅读量 --

服务卡死了要重启、凌晨要自动备份——这些都离不开进程管理定时任务。本篇把这两块一次讲清。

在 Linux 眼里,你运行的每一个程序(nginx、mysql、甚至你敲的 ls)都是一个进程(process),系统给每个进程发一个唯一的 PID(进程 ID)。理解进程,你才能”看见”系统里在发生什么,并在出问题时精准干预。

进程的相关概念及命令

查看进程:ps

ps aux                 # 查看系统所有进程(最常用)
ps aux | grep nginx    # 只看 nginx 相关进程
ps -ef                 # 另一种格式,显示父进程 PPID

ps aux 输出里几个关键列:

  • USER:谁跑的
  • PID:进程 ID(杀进程要用它)
  • %CPU / %MEM:占用 CPU / 内存百分比
  • COMMAND:启动命令

动态监控:top / htop

ps 是”拍快照”,top 是”实时监控”——进程列表会动态刷新,按 CPU 占用排序,一眼看出谁在吃资源:

top              # 实时刷新,按 q 退出
htop             # top 的增强版(需安装,更直观、可鼠标操作)

top 里按 P 按 CPU 排序、M 按内存排序。服务器卡顿时,第一反应就是 top 看看是不是某个进程把 CPU/内存吃满了。

进程状态

ps 输出的 STAT 列表示状态,常见的有:

  • R:运行中(Running)
  • S:睡眠(Sleep,等待事件,正常)
  • D:不可中断睡眠(通常在等磁盘 IO)
  • Z:僵尸进程(Zombie,已结束但父进程没回收,一般无害,大量出现要查)
  • T:暂停(Stopped,比如被 Ctrl+Z 挂起)

控制进程:信号

Linux 不直接”杀”进程,而是给它发信号(signal),进程收到信号后按信号的约定行事。常用信号:

信号编号含义
SIGTERM15优雅终止(默认,kill 发送),进程有机会清理后退出
SIGKILL9强制杀死(无法被忽略),立即结束,不给清理机会
SIGINT2中断(等同 Ctrl+C
SIGHUP1挂断,常用于”重新加载配置”(不重启服务)

发信号的命令

kill 1234            # 给 PID 1234 发 SIGTERM(15),请它退出
kill -9 1234         # 强制杀死(9),万不得已才用
killall nginx        # 按进程名杀所有 nginx
pkill -u tom         # 杀掉 tom 用户的所有进程

经验:先 kill PID(温和),进程不响应再 kill -9 PID(强制)。kill -9 太暴力,可能导致数据没保存,只在卡死时用。

前后台与作业控制

command &            # 在后台运行(加 &)
jobs                 # 看当前 shell 的后台任务
fg %1                # 把后台任务 1 拉回前台
Ctrl+Z               # 暂停当前前台任务
bg %1                # 让暂停的任务在后台继续跑
nohup command &      # 退出终端后依然运行(nohup 忽略挂断信号)

nohup command & 特别实用:你 SSH 连上服务器跑一个长时间任务,用 nohup 起,然后断开 SSH,任务还在后台跑。

定时任务:cron

很多事要”定时自动做”:每天凌晨备份、每小时清理日志、每周发报表。cron 就是 Linux 的”定时闹钟”。

crontab 语法

crontab -e             # 编辑当前用户的定时任务
crontab -l             # 列出已有任务
crontab -r             # 删除所有任务(慎用!)

crontab -e 里每行是一个任务,格式是 5 个时间字段 + 命令:

分 时 日 月 周  命令
*  *  *  *  *  command
字段范围含义
0-59第几分钟
0-23第几小时
1-31几号
1-12几月
0-7星期几(0 和 7 都是周日)

* 表示”每”,, 表示列举,/ 表示步长。例子:

30 2 * * * /backup.sh          # 每天凌晨 2:30 执行备份
0 */2 * * * /clean.sh          # 每隔 2 小时(0,2,4...)执行清理
*/5 * * * * /check.sh          # 每 5 分钟检查一次
0 0 * * 0 /weekly.sh           # 每周日零点

注意事项

  • 命令最好写绝对路径(cron 的环境变量很少,相对路径可能找不到)。
  • 输出默认会邮件发给你,想丢弃就加 > /dev/null 2>&1
    30 2 * * * /backup.sh > /dev/null 2>&1
  • 系统级定时任务在 /etc/crontab/etc/cron.d/,格式多一个”用户”字段。

常见新手坑

  • kill 不掉进程:它可能忽略了 SIGTERM,用 kill -9 强制;若仍是僵尸(Z),得杀它父进程。
  • top 里 CPU 100% 慌了:先看是哪个进程、是不是正常业务高峰,别盲目杀。
  • cron 任务不执行:多半是命令用了相对路径、或没写绝对路径;看 /var/log/cron 日志排查。
  • nohup 后终端关了任务还挂:确认用了 &nohup,输出重定向到文件。

这一篇你该记住的

  • 程序运行起来叫进程,每个有唯一 PID;ps aux 看快照、top 看实时(谁吃资源一目了然)。
  • 控制进程靠”发信号”:kill PID 温和终止(15),kill -9 PID 强制(9) 万不得已才用;killall/pkill 按名杀。
  • 前后台:& 后台、jobs/fg/bg 切换、nohup command & 断开终端仍运行。
  • cron 定时任务:crontab -e 编辑,格式 分 时 日 月 周 命令*=每、/=步长;命令用绝对路径。

下一篇我们搭第一个对外服务——用 Apache(HTTPD) 把网站跑起来,并认识 LAMP 全家桶。