目录
一、查看和控制进程
1. 进程和程序
1)概念:
-
程序:静态的指令集合(硬盘上的可执行文件)
-
进程:程序的一次动态执行过程(内存中运行的程序实例)是操作系统分配资源的基本单位,它是程序执行时的一个实体,每个进程都有自己独立的内存空间、系统资源以及执行状态。
2)区别:
程序 | 进程 | |
---|---|---|
存在形式 | 静态文件(如.exe/.sh) | 动态运行实例 |
生命周期 | 永久存储 | 从启动到终止 |
资源占用 | 不占用系统资源 | 占用CPU/内存等资源 |
3)关系:
-
一个程序可对应多个进程(如同时打开多个浏览器窗口)
-
进程是程序在内存中的动态表现(假如程序是"菜谱",进程就是"做菜过程")
-
程序是进程的静态表示:进程是程序的一次执行过程,即程序是进程的代码和数据的静态表示,而进程则是这些代码和数据在特定时间、特定内存地址空间中的动态实例。
-
进程是程序的执行:程序被加载到内存中,由操作系统为其分配资源并创建一个进程来执行。因此,进程是程序在特定环境下的执行过程。
2. 查看进程
1)ps 命令——查看进程静态信息
- ps 选项:
a | 显示当前终端的所有进程信息 |
u | 使用以用户为主的格式输出进程信息 |
x | 显示当前用户在所有终端下的进程信息 |
-e | 显示系统内的所有进程信息 |
-l | 使用长格式显示 |
-f | 使用完整的格式显示 |
- 执行 ps:
:
各字段含义解释:
- PID:进程标识符(Process ID),用于唯一标识一个进程。
- TTY:终端名称(TTY),表示该进程与哪个终端相关联。
- TIME:进程使用的CPU时间。
- CMD:命令(Command),启动该进程时所用的命令或程序名称。
- 执行 ps aux(BSD风格):
各字段含义解释:
- - USER:运行进程的用户名称。
- - PID:进程ID,唯一标识系统中的每个进程。
- - %CPU:进程使用的CPU时间占总CPU时间的百分比。
- - %MEM:进程使用的物理内存占总物理内存的百分比。
- - VSZ:虚拟内存大小(以KB为单位)。
- - RSS:常驻集大小,进程占用的非交换物理内存(以KB为单位)。
- - TTY:终端名称,启动进程的终端。
- - STAT:进程状态(例如运行、睡眠、停止等)。
- - START:进程启动的时间或日期。
- - TIME:进程实际使用的CPU时间。
- - COMMAND:启动进程所用的命令或程序名称。
-
执行“ps -elf”(Unix风格):
各字段含义解释:
- - F S UID:表示进程的状态标志、状态码以及用户ID。
- - PID:进程ID,唯一标识一个进程。
- - PPID:父进程ID,标识创建该进程的父进程。
- - C:处理器使用情况(核心数或子进程的CPU使用情况)。
- - PRI:优先级,表示进程调度的优先级。
- - NI:nice值,影响进程优先级的调整值。
- - ADDR:进程的内存地址或内核地址。
- - SZ:进程的大小(通常以KB为单位)。
- - WCHAN:进程等待的通道或系统调用名称。
- - STIME:进程启动时间。
- - TTY:终端设备,表示进程关联的终端。
- - TIME:进程使用的CPU时间。
- - CMD:命令名称或进程运行的程序名称。 这是用于展示和分析系统中运行进程的详细信息的格式。
2)top 命令——查看进程动态信息
- 概述:进程实时资源占用,每3秒刷新一次,加”-d“ 可以定义刷新时间。
- 执行示例:
以下是分隔符内内容的解释:
- `top - 13:12:45`:显示当前时间为13:12:45。
- `up 1:06`:系统已运行1小时6分钟。
- `3 users`:当前有3个用户登录。
- `load average: 0.24, 0.05, 0.02`:系统的平均负载,分别表示过去1分钟、5分钟和15分钟的负载值。这些值越低,说明系统越空闲。
- `Tasks: 231 total`:总共有231个进程。
- `1 running`:当前有1个进程正在运行。
- `230 sleeping`:有230个进程处于休眠状态。
- `0 stopped`:没有停止的进程。
- `0 zombie`:没有僵尸进程。
- `%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st`
- - `us`:用户空间占用CPU的百分比为0.0%。
- - `sy`:系统空间占用CPU的百分比为0.0%。
- - `ni`:调整过优先级的进程占用CPU的百分比为0.0%。
- - `id`:空闲CPU的百分比为100.0%。
- - `wa`:等待I/O的CPU时间百分比为0.0%。
- - `hi`:处理硬件中断的CPU时间百分比为0.0%。
- - `si`:处理软件中断的CPU时间百分比为0.0%。
- - `st`:被虚拟机偷走的CPU时间百分比为0.0%。
- `MiB Mem : 3372.8 total`:总物理内存为3372.8 MiB。
- `2595.0 free`:空闲物理内存为2595.0 MiB。
- `549.7 used`:已使用的物理内存为549.7 MiB。
- `454.9 buff/cache`:缓冲/缓存占用的内存为454.9 MiB。
- `MiB Swap: 4096.0 total`:总交换分区(Swap)大小为4096.0 MiB。
- `4096.0 free`:空闲交换分区为4096.0 MiB。
- `0.0 used`:已使用的交换分区为0.0 MiB。
- `2823.1 avail Mem`:可用内存为2823.1 MiB。
- `PID`:进程ID。
- `USER`:运行进程的用户。
- `PR`:进程优先级。
- `NI`:进程的nice值。
- `VIRT`:进程使用的虚拟内存总量。
- `RES`:进程使用的物理内存(驻留集)。
- `SHR`:进程使用的共享内存。
- `S`:进程状态(如运行、休眠等)。
- `%CPU`:进程占用的CPU百分比。
- `%MEM`:进程占用的内存百分比。
- `TIME+`:进程运行的总时间。
- `COMMAND`:启动进程的命令。
3)pgrep 命令——查询进程信息
- 特点:快速通过进程名查找PID
- 选项:-U :查询特定用户的进程、-t: 查询在特定终端运行的进程、-l:输出对应的进程名
- 例子:pgrep -l sshd # 查找sshd相关进程
4)pstree 命令——查看进程树
显示进程间的父子关系(树状结构)
选项:
pstree -p # 显示进程树包含PID
pstree -u # 显示进程树包含的用户名
pstree -a # 显示进程树完整的命令信息
3. 控制进程
1)启动进程
-
前台启动:直接执行命令(如
ping baidu.com
) -
后台启动:命令后加
&
(如ping baidu.com &
) -
持久运行:
nohup ping baidu.com &
(终端关闭后仍运行) -
调度启动进程:通过 at、crontab , 其中 at 是用于设置一次性计划任务, crontab 用于设置周期性运行计划任务
2)改变进程的运行方式
命令 | 功能 |
---|---|
CTRL + Z | 挂起当前的进程 |
jobs -l | 查看当前会话的后台任务和对应的PID |
fg %1 | 将1号任务调回前台 |
bg %2 | 将2号任务转后台继续运行 |
3)终止进程执行
kill -9 PID # 强制终止(SIGKILL) killall httpd # 终止所有httpd进程 pkill -U tom # 终止用户tom的所有进程 pkill -t #指定终端 pkill - 9 #强制终止pgrep -l -U #确认目标进程的相关信息
二、计划任务管理
1. at 一次性任务设置
例子:
echo "shutdown -h now" | at 23:00 # 今天23点关机
atq # 查看待执行任务
atrm 3 # 删除3号任务
特性:
-
需要先安装并启动
atd
服务 -
权限控制文件:
/etc/at.deny
(黑名单)和/etc/at.allow
(白名单)
2. 安装顺序
1)安装 at 命令
dnf install -y at
2)启动 atd 服务并查看现在时间
systemctl start atd
date #时间
3)设置计划
at 时间
at> 计划任务命令 (例子:shutdown -h now ##在某时间自动关闭当前系统)
at> <EOT>
3. crontab 周期性任务设置
1)crontab 的配置文件和目录
路径 | 说明 |
---|---|
/etc/crontab | 系统级任务配置文件 |
/etc/cron.d/ | 系统级任务配置目录 |
/var/spool/cron/ | 用户级任务存储目录(勿直接编辑) |
时间格式(分 时 日 月 周):
* * * * * command ┬ ┬ ┬ ┬ ┬ │ │ │ │ └── 星期(0-7,0和7都是周日) │ │ │ └────── 月份(1-12) │ │ └────────── 日(1-31) │ └────────────── 小时(0-23) └────────────────── 分钟(0-59)
特殊符号:
-
*
:任意值 -
,
:多个时间点(如1,15
) -
-
:连续范围(如1-5
) -
/
:间隔频率(如*/10
每10单位)
2)使用 crontab 命令管理用户的计划任务
-
crontab 命令操作
crontab -e # 编辑当前用户任务(自动保存到/var/spool/cron) crontab -l # 查看任务列表 crontab -r # 删除所有任务 crontab -u #指定所管理计划属于哪个用户,默认为当前用户
- 创建周期性计划的步骤
- 打开 crontab 文件:使用命令
crontab -e
打开当前用户的 crontab 文件。如果是首次使用,系统可能会提示选择一个文本编辑器。 - 编写任务:按照
minute hour day month week command(分 时 日 月 周 命令)
的格式编写任务。例如,要每天凌晨 3 点执行一个脚本/home/user/backup.sh
,则写入0 3 * * * /bin/bash /home/user/backup.sh
。 - 保存并退出:编辑完成后,保存并退出文本编辑器。Cron 服务会自动读取新的配置并执行任务。。
-
例子:每周一到周五的下午 6 点执行一个命令:要执行
systemctl restart httpd
命令,在 crontab 文件中写入:0 18 * * 1-5 systemctl restart httpd
三、总结
核心概念三句话
-
程序是静态文件,进程是动态实例
-
一个程序对应多个进程(如多开浏览器)
-
进程消耗资源(CPU/内存),程序只占磁盘
核心命令速查表
命令 | 核心功能 | 高频参数/操作 |
---|---|---|
ps | 静态查看进程 | aux (全量信息)-ef (父子关系) |
top | 动态监控资源 | P (CPU排序)M (内存排序) |
pgrep | 按名称查PID | -l (显示进程名) |
pstree | 显示进程树 | -p (显示PID) |
kill | 终止进程 | -9 (强制杀)-15 (优雅终止) |
核心工具对比
at | crontab | |
---|---|---|
任务类型 | 一次性 | 周期性 |
配置方式 | 命令行交互 | 专用配置文件 |
日志位置 | /var/log/syslog | /var/log/cron |
适用场景 | 临时任务(如关机提醒) | 常规维护(如每日备份) |