目录
查看进程
ps
功能:查看当前进程状态的静态快照(非实时)。
常用语法:
ps [选项]
核心选项
选项 | 说明 |
---|---|
a | 显示所有用户的进程(包括其他用户) |
u | 显示进程的详细信息(如用户、CPU、内存等) |
x | 显示无终端控制的进程(如后台服务) |
-e | 显示所有进程(等价于 ps aux ) |
-f | 显示完整格式(包括命令行参数) |
-p PID | 查看指定PID的进程 |
--sort | 按字段排序(例如 --sort=-%cpu 按CPU降序) |
常用组合
ps aux # 列出所有用户的进程及资源占用(BSD格式)
ps -ef # 完整格式显示所有进程(UNIX格式)
ps -u root # 查看root用户的进程
ps -p 1234 # 查看PID为1234的进程
输出字段解释
USER
:进程所属用户PID
:进程ID%CPU
:CPU占用百分比%MEM
:内存占用百分比VSZ
:虚拟内存大小(KB)RSS
:实际内存大小(KB)STAT
:进程状态(如S
=睡眠,R
=运行,Z
=僵尸进程)START
:进程启动时间COMMAND
:启动命令
top
功能:实时动态监控进程及系统资源占用。
语法:
top [选项]
交互模式快捷键
快捷键 | 功能 |
---|---|
P | 按CPU使用率排序(降序) |
M | 按内存使用率排序(降序) |
k | 终止指定PID的进程 |
q | 退出top |
Shift + H | 切换显示线程或进程 |
z | 切换彩色/黑白显示 |
关键字段解释
-
系统概览:
load average
:系统负载(1/5/15分钟的平均值)Tasks
:总进程数及状态统计(运行、睡眠、僵尸等)%Cpu(s)
:CPU使用分布(用户、系统、空闲等)KiB Mem
:内存使用情况(总量、已用、空闲)
-
进程列表:
PR
:进程优先级NI
:进程的Nice值(优先级调整值)VIRT
:虚拟内存总量RES
:实际内存使用量SHR
:共享内存大小
常用选项
top -p 1234,5678 # 监控指定PID的进程
top -u root # 仅显示root用户的进程
top -d 5 # 刷新间隔设为5秒
pgrep
功能:根据进程名或其他条件快速查找PID。
语法:
pgrep [选项] 进程名
核心选项
选项 | 功能 |
---|---|
-l | 显示进程名和PID |
-u 用户 | 过滤指定用户的进程 |
-x | 精确匹配进程名 |
-f | 匹配完整命令行(包含参数) |
示例
pgrep nginx # 查找所有名为nginx的进程PID
pgrep -u root sshd # 查找root用户的sshd进程
pgrep -f "python3 app.py" # 匹配完整命令行的进程
pstree
功能:以树状结构显示进程间的父子关系。
语法:
pstree [选项] [PID/用户]
核心选项
选项 | 功能 |
---|---|
-p | 显示PID |
-u | 显示进程所属用户 |
-a | 显示命令行参数 |
-h | 高亮当前进程及其祖先 |
示例
pstree -p 1000 # 显示PID为1000的进程树
pstree -u root # 显示root用户的进程树
pstree -ap # 显示所有进程的树状结构及参数
命令对比表格
命令 | 核心用途 | 实时监控 | 输出格式 | 适用场景 |
---|---|---|---|---|
ps | 静态查看进程快照 | 否 | 文本/列表 | 快速查看进程状态或过滤 |
top | 动态监控进程及资源 | 是 | 交互式界面 | 实时分析系统负载或资源占用 |
pgrep | 根据名称快速查找PID | 否 | 文本/PID列表 | 结合kill 终止进程或批量操作 |
pstree | 可视化进程父子关系 | 否 | 树状结构 | 分析进程依赖或服务启动链 |
控制进程
一、进程控制核心机制
1. 进程创建
-
fork()
函数- 功能:通过复制父进程创建子进程,子进程与父进程共享代码段,数据段使用写时拷贝技术。
- 返回值:父进程返回子进程PID,子进程返回0,失败返回-1。
- 示例:
pid_t pid = fork(); if (pid == 0) { printf("子进程PID: %d\n", getpid()); } else { printf("父进程PID: %d\n", getpid()); }
2. 进程终止
-
exit()
与_exit()
- 功能:终止进程执行,
exit()
刷新缓冲区并调用退出处理函数,_exit()
直接终止。 - 示例:
exit(0); // 正常终止,清理资源 _exit(1); // 立即终止,不清理缓冲区
- 功能:终止进程执行,
3. 进程等待
-
waitpid()
函数- 功能:父进程等待指定子进程结束,并获取其退出状态(避免僵尸进程)。
- 参数:
pid
:子进程PID(-1
表示任意子进程)options
:WNOHANG
(非阻塞等待)
- 示例:
int status; waitpid(pid, &status, 0); // 阻塞等待子进程结束
4. 进程替换
-
exec
函数族- 功能:替换当前进程映像,执行新程序(如
execl
,execvp
)。 - 特点:替换后原进程代码段被覆盖,仅保留PID。
- 示例:
execl("/bin/ls", "ls", "-l", NULL); // 执行`ls -l`
- 功能:替换当前进程映像,执行新程序(如
二、进程控制命令与工具
命令/函数 | 功能 | 关键参数/用法 | 示例 |
---|---|---|---|
kill | 终止进程 | kill -SIG [PID] | kill -9 1234 (强制终止PID 1234) |
pkill | 按进程名终止 | pkill -SIG 进程名 | pkill -HUP nginx (重载nginx配置) |
ps | 查看进程快照 | ps aux (显示所有进程及资源占用) | ps -ef | grep sshd (过滤sshd进程) |
top | 实时监控进程资源 | top -p [PID] (监控指定进程) | top -u root (仅显示root用户进程) |
pstree | 树状显示进程父子关系 | pstree -p (显示PID) | pstree -ap | grep java (追踪Java进程) |
三、关键场景与操作建议
-
创建子进程并等待退出
pid_t pid = fork(); if (pid == 0) { execl("/bin/ls", "ls", NULL); // 子进程执行`ls` } else { waitpid(pid, NULL, 0); // 父进程等待子进程结束:ml-citation{ref="1,5" data="citationList"} }
-
批量终止进程
pkill -TERM python # 终止所有Python进程:ml-citation{ref="8" data="citationList"}
-
分析进程依赖链
pstree -p 1 # 显示init进程(PID 1)的子进程树:ml-citation{ref="4,7" data="citationList"}
crontab周期性任务设置
一、crontab 基础
1. 核心概念
- cron:Linux系统自带的定时任务守护进程,用于按计划执行命令或脚本。
- crontab:用户级定时任务配置文件,每个用户可独立管理自己的任务。
2. 常用命令
命令 | 功能说明 | 示例 |
---|---|---|
crontab -e | 编辑当前用户的crontab文件 | crontab -e |
crontab -l | 列出当前用户的cron任务 | crontab -l |
crontab -r | 删除当前用户的所有cron任务(慎用!) | crontab -r |
crontab -u user -e | 编辑指定用户的crontab(需root权限) | crontab -u www-data -e |
二、crontab 时间字段解析
1. 时间格式
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── 星期几(0-6, 0=周日)
│ │ │ └──── 月份(1-12)
│ │ └────── 日期(1-31)
│ └──────── 小时(0-23)
└────────── 分钟(0-59)
2. 特殊符号
符号 | 说明 | 示例 |
---|---|---|
* | 匹配所有值 | * * * * * → 每分钟执行 |
, | 指定多个值 | 0,15,30 * * * * → 每小时的0、15、30分执行 |
- | 指定范围 | 0 9-18 * * * → 每天9点到18点整点执行 |
/ | 间隔频率 | */5 * * * * → 每5分钟执行一次 |
L | 月份最后一天或星期最后一天(仅部分系统支持) | 0 0 L * * → 每月最后一天执行 |
W | 最近工作日(仅日期字段) | 0 0 15W * * → 每月15日最近的工作日执行 |
三、常用任务示例
任务描述 | crontab表达式 | 说明 |
---|---|---|
每天凌晨3点执行备份脚本 | 0 3 * * * /path/to/backup.sh | 固定时间任务 |
每5分钟检查一次服务状态 | */5 * * * * /usr/bin/systemctl check nginx | 间隔执行 |
每周一上午9点清理日志 | 0 9 * * 1 /bin/rm -rf /logs/*.log | 按星期执行(0=周日,1=周一) |
每月1日和15日中午12点重启服务 | 0 12 1,15 * * /sbin/reboot | 多日期任务 |
每小时的第30分钟执行 | 30 * * * * /path/to/script | 固定分钟任务 |
四、高级用法
1. 环境变量设置
在crontab文件顶部定义环境变量,确保任务执行环境正确:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=user@example.com # 任务执行结果发送到指定邮箱
2. 输出重定向
默认情况下,cron任务的输出会通过邮件发送给用户。可手动重定向:
* * * * * /path/to/command >/dev/null 2>&1 # 丢弃所有输出
* * * * * /path/to/command >> /var/log/cron.log 2>&1 # 输出追加到日志文件
3. 特殊快捷语法
字符串 | 等效表达式 | 说明 |
---|---|---|
@reboot | - | 系统启动时执行一次 |
@yearly | 0 0 1 1 * | 每年1月1日0点执行 |
@monthly | 0 0 1 * * | 每月1日0点执行 |
@weekly | 0 0 * * 0 | 每周日0点执行 |
@daily | 0 0 * * * | 每天0点执行 |
@hourly | 0 * * * * | 每小时0分执行 |
五、示例场景
1. 数据库每日备份
0 2 * * * /usr/bin/mysqldump -u root -pPASSWORD dbname > /backups/db_$(date +\%Y\%m\%d).sql
2. 每周清理临时文件
0 0 * * 0 /bin/rm -rf /tmp/* # 每周日0点清理/tmp目录
3. 系统启动时启动服务
@reboot /usr/sbin/service nginx start
总结表格
分类 | 关键点 | 示例/命令 |
---|---|---|
编辑任务 | 使用crontab -e 编辑用户任务 | crontab -e |
时间格式 | 分 时 日 月 周 + 命令 | 0 3 * * * /backup.sh |
特殊符号 | * (所有)、, (多值)、- (范围)、/ (间隔) | */10 * * * * → 每10分钟执行 |
环境变量 | 在crontab文件顶部定义PATH 、MAILTO 等 | PATH=/usr/local/bin:/usr/bin |
输出处理 | 重定向输出到文件或丢弃 | >/dev/null 2>&1 |
快捷语法 | @daily 、@reboot 等替代复杂时间设置 | @daily /scripts/cleanup.sh |
日志排查 | 查看/var/log/cron 或journalctl -u cron | tail -f /var/log/cron |