Linux 进程、作业控制、定时任务 完整版整理笔记

一、程序、进程、线程

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
相关推荐
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理