进程
进程和程序有关,把该文件放到内存里,进程是动态的,不同时刻的状态不一样
内存:放置正在运行的程序和所需数据的位置
程序启动 —— 》将相关文件和数据放到内存里 —— 》进程 (processes)
进程相关命令
命令 | 说明 |
ps | 查询系统当前的静态进程信息 ps : processes statistic |
ps a (BSD风格) | 显示所有进程信息 |
ps au (BSD风格) | 以用户为主显示进程信息 |
ps auX (BSD风格) | 显示当前用户在所有终端下所有进程信息 |
ps -elf | 列出系统上所有进程的详细信息 |
top | 动态查看系统的实时状态 |
pgrep -l 进程名 | 显示指定进程的相关进程的对应id和进程名称 |
pstree -aup | 显示进程树和响应pid |
jobs -l | 查看当前被挂起的进程的任务号和进程号 示例 : [1]+ 1832 停止 |
fg 任务号 | 将挂起的进程放到前台运行 |
bg 任务号 | 将被挂起的进程放到后台运行 |
kil [选项] 进程号 | 杀死指定进程 针对进程号的命令 常用信令选项: -1 : 重新初始化进程,并且进程pid不会改变 -2 : 结束进程,但不强制;Ctr+C 是对前台进程执行的ki -2指令 -9 : 发送信令,强制进程 -15 : 正常结束进程,也是kil命令不加选项的默认信令 -19 : 暂停进程 |
pkill [选项] 进程名 | 可以针对进程名、指定用户启动的进程、终端的命令 杀死指定进程 |
pkill -9 -U 用户名 | 强制杀死指定用户进程 |
killall [选项] 进程名 | 针对进程名 杀死指定进程 |
netstat -anpt | grep httpd | 查看指定名为httpd的进程的相关信息 -a : 显示所有进程 -n : 以数字显示地址相关信息 -p : 列出协议 -t : 列出tcp相关信息 |
快捷键 | 说明 |
Ctrl + C | 取消当前前台程序 |
Ctrl + Z | 将前台程序挂起到后台暂停起来,该进程处于停止状态 |
ps命令选项参数 | 说明 |
-e | (every) 显示所有进程 |
-u | (user) 显示面向用户的进程的详细信息,如进程所有者、CPU 使用率、内存使用率等 |
-f | (full-format) 以全格式的列表显示进程的信息,包括进程之间的层级关系 |
-p | (pid) 查找具有指定进程ID 的进程 |
-C | (Command) 查找具有指走命令名称的进程 |
-aux | 在当前用户下以详细格式显示所有正在运行的进程其中x是表示在没有控制终端的情况下列出进程,这些显示的主要是启动并运行在后台的进程 |
终端详细信息解析
ps -elf信息列 | 说明 |
F (flags) | 该进程的特定标志 |
S (stat) | 进程状态 |
PPID (Parent Process lD) | 该进程的父进程ID,创建当前进程的进程ID,如果没有父进程就显示0 |
UID | 进程所有者的用户名 ; 和USER一样 |
C | CPU的利用率,和%CPU一样 |
PRI (Priority:优先级) | 进程调度的优先级,越小越优先 也叫实时进程 或 动态优先级(0~99) 取值范围: 0~139 (共140个) |
NI (nice) | 进程谦让度(对CPU资源的抢夺能力),NI值越高,优先级越低 也叫非实时进程 或静态优先级,取值范围 : -20~19 (共40个) |
ADDR | 内存地址,该进程在运行时所用的数据在内存中的地址 |
SZ | 进程使用的交换空间 (虚拟内存) 的大小 (以KB为单位) |
WCHAN (Waiting Channel) | 如果该进程处于睡眠状态,这一列将显示进程正在等待的资源或条件 |
STIME | 该进程启动时间 |
ps -aux信息列 | 说明 |
USER | 进程所有者的用户名 |
PID (Procedure lD) | 该进程唯一进程ID,每一个进程在启动时,系统内核会分配一个运行时的唯一标识ID |
%CPU | 该进程使用的 CPU 资源的百分比 |
%MEM | 该进程使用的内存资源的百分比 |
VSZ (Virtual Memory Size) | 该进程占用虚拟内存的大小 ; 交换分区的占用量;以KB 为单位 |
RSS (Resident Set Size) | 该进程占用的物理内存大小 ; 以 KB 为单位 |
TTY | 该进程在哪个终端上运行 若该进程不在终端上运行则显示“?” 如果显示的是tty1-tty6表示本机登录,显示pts/0等,表示为网络连接进主机。 TTY是电传打字机的缩写;teletypewriter;TeleTYpe,是早期古老的一种终端设备 |
STAT | 进程当前运行状态 |
START | 该进程启动的时间点 |
TIME | 进程运行过程中占用 CPU 的总时间 |
CMD | 启动进程的命令的名称 |
前台和后台的概念
前台 : 进程独占终端,无法再执行其他指令
后台 : 进程位于后端运行,不独占终端
nice命令
也叫非实时进程 或 静态优先级,如果要把nice值映射到PRI,是100~139,而实时进程是0~99
命令 | 说明 |
nice | 查看当前进程的nice值,不手动设置就默认为0 静态优先级,是我们定义的 nice值越高,优先级越低 |
nice -10 bash | 将bash shell的静态优先级提高10个单位的优先级 |
nice --10 bash | 将bash shell的静态优先级降低10个单位的优先级 |
终端类型
- tty终端
- 虚拟终端
- pts终端
- 伪终端
Linux的桌面只是系统中的一个应用程序 (内核之外) ,默认安装在TTY1终端之上
进程的状态
第一个字母表示进程的状态,后续的文本表示进程其他的属性
进程状态 | 说明 |
D | 不可唤醒的休眠进程 |
R | 正在运行的进程 |
S | 休眠进程 |
T | 暂时停止的进程 |
Z | 僵尸进程 父进程没有回收释放已经停止的进程,就会形成僵厂进程,一直占用资源 |
s | 父进程 |
+ | 前台的进程 直接在终端下运行的程序,占据了终端,占据时不能正常使用其他命令 |
< | 高优先级 |
N | 低优先级 |
代码风格
Linux环境下命令的选项大致可分为3个风格
- Unix风格 : “Is -a”、“s -Alh”
- BSD风格 : “tarxzf、“ps aux”
- GNU风格(Gnuis Not Unix) : 如 “gzip --help
top界面解析
使用top命令显示实时进程动态
top界面信息 | 说明 |
top | 系统当前时间 |
up | 该主机运行时间 2:14表示运行了2小时14分钟 |
user | 当前系统登录的用户数量 |
load average | 系统负载平均值 : 最近一分钟的负载,最近5分钟的负载,最近15分钟的负载 数字越小代表负载越低,最近15分钟的最具备参考价值 |
top进程信息列 | 说明 |
PR | 和PRI一样,代表优先级 |
VIRT | 虚拟内存使用量 |
RES | 物理内存使用量 |
SHR | 共享内存大小 |
缓冲区 (buffer)
内存 ——》 硬盘
缓冲区是一块内存区域,用于临时存储数据,以便在不同速度的设备(比如内存和硬盘)之间传输数据时起到协调作用。
当程序需要向硬盘写入数据时,数据首先被写入缓冲区。当缓冲中区满或满足某些条件(比如占满三分之一)时,缓冲区中的数据会一次性写入硬盘。这样做的好处是可以减少直接写入硬盘的次数,提高写操作的效率。
缓存区 (cache)
硬盘 —— 》内存 —— 》CPU
- 当程序需要数据时,数据首先从硬盘读取到内存中。
- 而内存作为CPU和硬盘之间的桥梁,具有比硬盘快得多的读取速度。数据在内存中,CPU就可以直接从内存中读取到CPU缓存中,而不需要等待硬盘的慢速响应。
- 因为内存的速度仍然跟不上CPU的速度,因此这些教据会先被加载到CPU缓存中 ( 三级缓存,二级缓存 ) —— 》寄存器 —— 》运算器。
计划任务
- 一次性任务
- 在未来的某一个时间运行一个任务
- 周期性任务
- 在未来的某一个固走的时间周期性地运行任务
一次性任务
命令 | 说明 |
yum -y install at | 安装相关软件包 |
systemctl start atd | 运行该软件对应服务 |
at 时间 (23:30) | 创建一个于23:30运行的一次性任务 |
atg | 查看创建的计划任务 |
atrm 任务编号 | 删除指定任务号的计划任务 |
快捷键 | 说明 |
Ctrl + D | 退出任务计划编辑界面 |
周期性任务
- 分钟 (0 - 59)
- 小时 (0 - 23)
- 日期 (1 - 31)
- 月份 (1 - 12或缩写如 jan,feb等)
- 星期 (0 - 7,其中 0 和 7 都代表星期日,或缩写如 sun,mon等)
实验文字步骤
- 在 /etc/cron.hourly/ 目录下放置或创建要执行的脚本
- chmod +x文件名.sh 给脚本文件添加执行的权限
- 通过 vim /etc/crontab 命令添加周期性任务
- systemctl restart crond 重启相关服务
- 最后可以通过run-parts命令测试周期性任务
实验图片步骤
在 /etc/cron.hourly/下编写脚本文件
编辑/etc/crontab文件
五个*号对应5种日期单位
每分钟 每小时 每天 每月的这一天 每周的周几
语法 : *****要执行该命令的用户 要执行的命令 执行脚本的路径
使用run-parts命令执行脚本,然后查看test文件是否被echo命令追加了字符串
因为设置的是每隔一分钟执行一次,所以过了几分钟就有了很多追加内容
命令 | 说明 |
crontab -e | 在root用户下添加计划任务脚本内使用的命令最好用绝对路径 |
crontab -l -u [用户名] | 查询执行用户的计划任务 |
crontab -e -u 用户名 | 给指定用户添加计划任务以用户为单位,分别指定计划任务 |