一、进程
1. 相关概念
- 程序:没有运行的代码,是指令和规则的集合,定义了要执行和操作的任务。
- 进程:正在运行的代码,是程序的执行实例。
- 线程:是计算机进行运算的最小单位,是进程中实际允许的单位。
2. 父进程和子进程
在操作系统中,父进程和子进程是描述进程之间创建和被创建关系。下面是父进程和子进程的具体关系:
父进程是创建另一个进程的进程。当一个进程创建一个新的进程时,它就成为了新进程的父进程。父进程可以控制子进程的创建、执行和终止,通常负责子进程的资源分配和同步。
子进程是由另一个进程(父进程)创建的进程,可以继承父进程的某些属性,如环境变量和文件描述符。子进程在创建时会复制父进程的代码和数据,但拥有自己的内存空间和执行状态。可以执行与父进程不同的任务,也可以与父进程通信和同步。
3. 进程查看命令
3.1 ps命令 – 显示进程状态
ps命令来自英文单词process的缩写,功能是显示当前系统的进程状态。使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源(处理器与内存)使用占比、运行状态等。
ps 选项
常见的选项:
选项 | 功能 |
---|---|
-a | 显示所有进程 |
-u | 显示进程的所属用户 |
-x | 显示进程详细信息 |
-e | 显示所有进程信息 |
-l | 详细展示进程信息 |
-f | 完整格式展示进程信息 |
进程的信息内容:
ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 166868 11820 ? Ss 09:14 0:01 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 09:14 0:00 [kthreadd]
- USER:进程的所属用户。
- PID:进程号,是进程的全局唯一标识。
- %CPU:进程所占用的CPU资源百分比。
- %MEM:进程所占用的内存资源百分比。
- VSZ:进程使用的虚拟内存大小。
- RSS:进程使用的物理内存大小。
- TTY:进程所在的终端。
- STAT:进程的当前状态。
- S:休眠状态,可以中断。Ss表示进程有子进程。
- T:停止状态。
- D:不可中断的休眠状态。
- Z:僵死状态。
- I(大写的i):空闲状态。
- <:进程的执行优先级较高。
- N:进程的执行优先级较低。
- l(小写的L):子进程的线程。
- +:进程显示在前台。
- START:进程启动的时间。
- TIME:进程占用CPU的时间。
- COMMAD:启动进程的命令。
ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 41717 ep_pol 09:14 ? 00:00:01 /sbin/init splash
1 S root 2 0 0 80 0 - 0 kthrea 09:14 ? 00:00:00 [kthreadd]
- F:标志位,进程的系统标记。
- S:进程的状态。
- UID:进程所属用户的ID。
- PID:进程号。
- PPID:父进程号。
- C:进程对CPU的使用率。
- PRI:进程的优先级。
- NI:进程的nice值,影响进程的优先级。
- ADDR:进程的内存地址。
- SZ:进程使用的虚拟内存大小。
- WCHAN:进程正在等待的内核函数或资源。
- STIME:进程启动的时间。
- TTY:进程所在的终端。
- TIME:进程累计使用CPU的时间。
- CMD:启动进程的命令。
ps -aux适用于查看进程占用的资源信息,ps -elf适用于查看进程在系统中的详细信息。
怎么查看一个进程在系统中的资源占用情况,以及占用CPU/内存过高,处理的方法?
- 使用ps -aux定位找到这个进程,获取PID号。
- 再使用ps -elf | grep PID号 查看进程的详细信息。
- 根据实际使用情况来处理。kill -9 PID号,强制杀死进程。
怎么删除一个僵死进程?
- 僵死进程占用的资源不多,可以不用删除。
- 僵死进程无法使用kill -9强制杀死,一定要清除就需要重启设备。
3.2 top命令 – 实时显示系统运行状态
top命令的功能是实时显示系统运行状态,包含处理器、内存、服务、进程等重要资产信息。
top [选项]
常见的选项:
选项 | 功能 |
---|---|
-b | 使用非交互模式 |
-n | 指定显示的次数 |
交互页面的常见操作:
1:显示所有CPU的详情。
q:退出交互式页面。
进程的信息内容:
top
top - 11:16:27 up 2:01, 2 users, load average: 0.00, 0.00, 0.00
任务: 297 total, 1 running, 296 sleeping, 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
MiB Mem : 3870.6 total, 1886.6 free, 860.2 used, 1123.8 buff/cache
MiB Swap: 3898.0 total, 3898.0 free, 0.0 used. 2744.7 avail Mem
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
1 root 20 0 166868 11820 8236 S 0.0 0.3 0:01.46 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par
-
top - 11:16:27 up 2:01, 2 users, load average: 0.00, 0.00, 0.00:系统概览。
- 11:16:27:系统当前时间。
- up 2:01:系统已运行的时间。
- 2 users:系统用户数量。
- load average: 0.00, 0.00, 0.00:显示过去1分钟、5分钟和15分钟的平均负载。
-
任务: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie:进程详情。
- 297 total:系统中总共有297个任务。
- 1 running:有1个任务正在运行。
- 296 sleeping:有296个任务处于睡眠状态。
- 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:CPU详情。
- %Cpu(s): 0.0 us,用户空间占用CPU的百分比为0.0%。
- 0.0 sy,内核空间占用CPU的百分比为0.0%。
- 0.0 ni,改变过优先级的进程占用CPU的百分比为0.0%。
- 100.0 id,CPU空闲的百分比为100.0%。
- 0.0 wa,等待输入输出的CPU百分比为0.0%,也就是磁盘的读写性能。
- 0.0 hi,硬件中断的CPU百分比为0.0%。
- 0.0 si,软件中断的CPU百分比为0.0%。
- 0.0 st,虚拟环境中,其他虚拟机占用的CPU百分比为0.0%。
-
MiB Mem : 3870.6 total, 1886.6 free, 860.2 used, 1123.8 buff/cache:内存详情。
- MiB Mem : 3870.6 total,总内存为3870.6 MiB。
- 1886.6 free,空闲内存为1886.6 MiB。
- 860.2 used,已使用的内存为860.2 MiB。
- 1123.8 buff/cache,用作缓冲区和缓存的内存为1123.8 MiB。
-
MiB Swap: 3898.0 total, 3898.0 free, 0.0 used. 2744.7 avail Mem:虚拟内存详情。
- MiB Swap: 3898.0 total,总虚拟内存大小为3898.0 MiB。
- 3898.0 free,空闲虚拟内存为3898.0 MiB。
- 0.0 used,已使用的虚拟内存大小为0.0 MiB。
- 2744.7 avail Mem,可用的虚拟内存大小为2744.7 MiB。
-
进程号:进程全局的唯一标识。
-
USER:进程的所属用户。
-
PR:进程的优先级。
-
NI:nice值,用于调整进程的优先级。
-
VIRT:进程使用的虚拟内存大小。
-
RES:进程使用的常驻内存大小。
-
SHR:进程使用的共享内存大小。
-
%CPU:进程占用的CPU百分比。
-
%MEM:进程占用的内存百分比。
-
TIME+:进程占用CPU的总时间。
-
COMMAND:启动进程的命令。
3.3 pgrep命令 – 检索进程PID号
pgrep命令来自英文词组“process global regular expression print”的缩写,功能是用于检索进程PID号。
pgrep [选项] 进程名
常见的选项:
选项 | 功能 |
---|---|
-a | 显示进程的PID和详细信息 |
-c | 统计进程的数量 |
-f | 匹配进程名 |
3.4 jobs命令 – 显示终端后台的作业信息
jobs命令来自英文单词“job”,功能是用于显示终端后台的进程信息。
jobs [选项]
常见的选项:
选项 | 功能 |
---|---|
-l | 显示后台进程和进程号 |
-n | 显示上次查看后状态变化的进程 |
-r | 显示正在运行的进程 |
-s | 显示已经停止的进程 |
3.5 pstree命令 – 以树状图形式显示进程信息
pstree命令来自英文词组“display a tree of processes”的缩写,功能是用于以树状图形式显示进程信息。
pstree [选项]
常见的选项:
选项 | 功能 |
---|---|
-u | 显示进程所属用户 |
-p | 显示进程的PID |
4. 系统五大负载指标
4.1 CPU
查看CPU负载的命令有:top、htop。
4.2 内存
查看内存负载的命令有:free、top。
清理内存的缓存:echo 1 > /proc/sys/vm/drop_caches
4.3 磁盘
查看内存负载的命令有:iostat。
4.4 网络
查看网络负载的命令有:ifconfig、iftop。
4.5 进程
查看进程负载的命令有:top、ps。
二、定时任务
1. crontab命令– 管理定时计划任务
在Linux系统中,cron是负责执行定时任务的服务。它使用crontab命令来管理定时任务,每个用户都有一个对应的 crontab 文件,允许该用户设置定时任务。
crontab [选项]
常见的选项:
选项 | 功能 |
---|---|
-e | 编辑任务 |
-l | 查看任务 |
-r | 删除任务 |
-u | 设置用户 |
在Ubuntu系统中,基本上第一次使用crontab命令编辑定时任务,会提示选择文本编辑器。默认是nano,可以根据习惯选择vim编辑器。如果没有提示设置,则可以使用select-editor命令,选择crontab的编辑器。
除此之外,crontab 任务的标准输出和标准错误默认情况下是发送到 /dev/null 的,这意味着不会在终端或任何地方看到输出结果。要想看到数据结构,则需要在设置定时任务时,指定标准输出和标准输入的重定向文件。
2. crontab任务基本格式
分钟 小时 日期 月份 星期 命令
- 时间可以使用*字符表示,也就是表示任意时间。
- 分钟:范围是0-59。
- 小时:范围是0-23。
- 日期:范围是1-31。、
- 月份:范围是1-12。
- 星期:范围是0-7,0和7都可以表示星期日。
- 命令:定时执行的命令或脚本等。
3. 定时任务常见操作
-
每分钟执行一次任务。
crontab -e * * * * * 命令
-
每个小时执行一次任务,这里是每个小时整点的时候执行任务。
crontab -e 0 * * * * 命令
-
每天执行一次任务,这里是每天的00:00时执行任务。
crontab -e 0 0 * * * 命令
-
每周执行一次任务,这里是每周星期一的00:00时执行任务。
crontab -e 0 0 * * 1 命令
-
每月执行一次任务,这里是每个月1号的00:00时执行任务。
crontab -e 0 0 1 * * 命令
-
每隔三天执行一次任务。
crontab -e 0 0 */3 * * 命令
- */3:这里表示每3天。
-
每天的上午8点和下午3点各执行一次任务。
crontab -e 0 8,15 * * * 命令
- 8,15:表示8点和15点。
-
每天8点到11点之间的整点时,执行指定任务。
crontab -e 0 8-11 * * * 命令