一、程序、进程、线程

1. 基础概念

  1. 程序 存放在硬盘中、具备执行功能的静态文件,不占用运行资源。 示例:/usr/local/apache/bin/httpd/bin/ls

  2. 进程 程序运行后的形态,是操作系统分配 CPU、内存、硬盘、网络、GPU 等资源的基本单位,可理解为动态资源池

  • 进程之间相互隔离,彼此不能直接访问资源;
  • 一个程序可以启动出多个进程。
  1. 线程 真正完成程序功能的执行单元
  • 同一个进程内的所有线程共享进程资源,通信效率高;
  • 进程是线程的集合,一个进程至少包含 1 个主线程
  • 每个进程最多可以有 65535 个线程

2. 进程分类(按线程特性划分)

  1. 多线程程序 进程内创建大量线程处理任务。
  • 优点:资源利用率高、线程间通信效率高
  • 代表:Nginx、Java 程序
  1. 多进程程序 依靠创建子进程处理任务,线程数量少。
  • 优点:进程相互隔离,单个子进程故障不影响整体,稳定性更强
  • 代表:Apache httpd

3. 按运行停留时间划分

  1. 普通进程 任务执行完毕自动退出,生命周期短。 实操案例:

bash

运行

ls /etc
  1. 守护进程(Daemon) 常驻系统后台运行,通常监听服务器端口;当客户端请求到达对应端口时,调用程序响应请求。
  • 特点:脱离终端,长期运行;
  • 常见服务:httpdsshdcrondnetwork

4. 按父子关系划分

  1. 父进程 负责创建、管理子进程,子进程结束后,负责回收子进程资源

  2. 子进程 由父进程创建,主要负责处理用户请求与具体业务。

  3. 僵尸进程 子进程先结束,父进程未及时回收其资源,该子进程就变为僵尸进程。

  • 状态标识:Z
  • 危害:占用进程 ID,大量僵尸进程会导致系统无法创建新进程。

纠正原笔记错误:父进程先退出的进程称为孤儿进程,并非僵尸进程。

5. 进程状态标识(必记)

表格

状态码 状态名称 说明
R 运行态 正在使用 CPU 运行,或排队等待 CPU 调度
S 休眠态(可中断) 进程暂时暂停,可被信号唤醒,多数进程常态
D 不可中断休眠 等待硬件 I/O 资源,无法被普通信号终止
Z 僵尸进程 子进程已退出,父进程未回收资源
T 停止态 进程被挂起、暂停运行

二、系统平均负载

1. 概念

平均负载是系统中 运行态 (R) + 不可中断态 (D) 进程数量的统计平均值,系统默认统计三组数据:1 分钟、5 分钟、15 分钟 负载,反映系统繁忙程度。

2. 核心规则

负载高低和 CPU 核心数 强相关:

  • 单核 CPU:负载值等于 1,CPU 满载;大于 1,系统过载;
  • 多核 CPU:负载值接近 CPU 核心数,属于正常满载;
  • 趋势判断:1 分钟负载远大于 15 分钟 → 系统压力突发上涨;三组数值接近 → 负载长期平稳。

3. 查看平均负载(命令 + 案例)

bash

运行

# 1. uptime:最简查看,仅展示负载
uptime

# 2. w:查看登录用户 + 系统负载
w

# 3. top:动态监控,首行包含负载信息
top

三、查看进程命令

1. ps 命令(静态快照,不自动刷新)

常用参数组合及用法
  1. ps aux 查看所有用户的全部进程,展示 CPU、内存、PID、进程状态等完整信息。

bash

运行

ps aux
# 过滤指定进程(示例:查看httpd进程)
ps aux | grep httpd
  1. ps -elf 侧重查看父子进程关系、进程优先级。

bash

运行

ps -elf | grep httpd
  1. ps -eLf 详细查看进程内的线程数量

bash

运行

ps -eLf | grep httpd
关键字段(ps aux)
  • USER:进程运行用户(降权场景重点查看)
  • PID:进程唯一编号
  • STAT:进程状态(R/S/D/Z/T)

2. top 命令(动态实时监控,默认 3 秒刷新一次)

基础参数 + 案例

bash

运行

# 直接运行,默认动态刷新
top

# -d 指定刷新间隔(单位:秒),每2秒刷新一次
top -d 2

# -n 指定总刷新次数,刷新5次后自动退出
top -n 5

# -b 批处理模式,配合-n输出全部内容
top -b -n 2

# -u 仅查看指定用户的进程
top -u huangjie

# -p 仅监控指定PID的进程
top -p 1234
运行中的交互快捷键
  • 1:拆分展示每一颗 CPU 核心的占用率
  • M:按内存使用率从高到低排序
  • P:按 CPU 使用率从高到低排序
  • q:退出 top

四、前后台作业控制

1. & 符号

将前台进程直接放入后台运行;关闭终端后,进程会终止。 案例:

bash

运行

# 后台运行睡眠程序,持续100秒
sleep 100 &

2. nohup 命令

作用:让进程脱离终端运行,关闭远程连接 / 当前终端,进程依然后台执行。 默认日志输出到 nohup.out。 语法与案例:

bash

运行

# 基础用法,日志默认存入 nohup.out
nohup sleep 300 &

# 进阶用法:自定义日志文件
nohup /usr/local/apache/bin/apachectl start &>> /tmp/httpd.log &

3. 后台任务管理指令

  1. jobs -l 查看当前终端下所有后台任务,-l 参数额外显示进程 PID。

bash

运行

jobs -l
  1. Ctrl + Z当前前台进程挂起(暂停),移入后台。 实操:执行 sleep 200 → 按下 Ctrl+Z

  2. bg 任务号 让后台暂停的进程恢复运行

bash

运行

# 先查看任务编号
jobs
# 恢复编号为1的后台任务
bg 1
  1. fg 任务号 将后台进程调回前台运行。

bash

运行

fg 1

五、终止进程命令

1. kill(按 PID 终止进程)

语法:kill [信号] PID

  • 默认信号 15:优雅停止,允许进程保存数据、正常退出;
  • 信号 -9:强制终止进程(慎用,易造成数据丢失)。

案例:

bash

运行

# 优雅停止 PID 为1234的进程
kill 1234

# 强制杀死进程
kill -9 1234

2. killall(按进程名终止所有同名进程)

无需查询 PID,一次性杀死所有同名进程。

补充:CentOS7 最小化安装需先安装工具:yum install -y psmisc

案例:

bash

运行

# 停止所有 httpd 进程
killall httpd

# 强制杀死所有 httpd 进程
killall -9 httpd

3. pkill(功能更强,支持进程名、终端名)

bash

运行

# 按进程名强制终止,用法同 killall
pkill -9 httpd

# -t 按终端名终止进程(示例:踢出 pts/0 终端)
pkill -9 -t pts/0

六、定时任务

分类:一次性定时任务(at)、周期性定时任务(crond)


(一)一次性定时任务 at

1. 环境准备

at 工具需手动安装并启动服务:

bash

运行

# 安装软件
yum install -y at

# 启动服务并设置开机自启
systemctl start atd
systemctl enable atd
2. 常用时间格式
  • now + 5 minutes :5 分钟后执行
  • now + 1 hours :1 小时后执行
  • 10:30 :今日 10:30 执行
  • 16:00 tomorrow :明日 16:00 执行
3. 完整实操案例

bash

运行

# 进入定时任务编辑模式:5分钟后创建文件并写入内容
at now + 5 minutes

# 输入执行命令
touch /tmp/test.txt
echo "at任务执行成功" >> /tmp/test.txt

# 按下 Ctrl+D 提交任务
4. at 任务管理命令

bash

运行

# 查询所有一次性定时任务(等价 at -l)
atq

# 查看指定任务详情(任务号从 atq 获取)
at -c 任务号

# 删除指定任务(等价 at -d)
atrm 任务号

(二)周期性定时任务 crond

系统自带守护进程 crond,循环重复执行任务,企业常用。

1. 核心文件与路径
  • 服务名:crond
  • 服务状态查看:systemctl status crond
  • 运行日志(排错用):/var/log/cron
  • 全局配置文件:/etc/crontab
  • 用户定时任务存放目录:/var/spool/cron/(每个用户独立文件)
  • 邮件相关:
    • 用户邮件目录:/var/spool/mail/用户名
    • 邮件发送失败临时文件:/var/spool/postfix/maildrop/
2. 时间格式(五段式,必背)

plaintext

分  时  日  月  周    执行命令
*   *   *   *   *     command

取值范围:

  • 分:0~59
  • 时:0~23
  • 日:1~31
  • 月:1~12
  • 周:0~7(0 和 7 均代表周日)
3. 时间符号含义

表格

符号 作用
* 代表「每一个时间单位」
, 分隔多个离散时间点(或者)
- 表示连续的时间范围
/n 表示间隔频率,每隔 n 个单位执行一次
4. crontab 操作命令

bash

运行

# 编辑/创建当前用户定时任务
crontab -e

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

# 清空当前用户所有定时任务(谨慎使用)
crontab -r

# root 查看指定用户的定时任务
crontab -l -u 用户名
5. 综合实操案例

bash

运行

# 1. 每分钟向日志文件写入内容
* * * * * echo "每分钟测试" >> /tmp/1.log

# 2. 每小时的30分、50分执行文件拷贝
30,50 * * * * cp /etc/passwd /tmp/

# 3. 每小时 10~20分 每分钟执行任务
10-20 * * * * date >> /tmp/time.log

# 4. 每隔30分钟重启Apache
*/30 * * * * /usr/local/apache/bin/apachectl restart

# 5. 每天凌晨2点执行脚本
0 2 * * * /root/test.sh

# 6. 每周日 23点30分 清理临时日志
30 23 * * 0 rm -rf /tmp/*.log
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐