洞察 Linux 进程管理

一、进程和线程的概念

1.进程

 (1)概念

进程是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。进程是程序的执行实例,拥有独立的资源(如内存、文件描述符等)。每个进程在创建时会被分配唯一的进程ID,即为PID,也叫进程编号。

(2)特点

资源隔离:进程拥有独立的虚拟地址空间。

独立性:进程崩溃通常不会直接影响其他进程,代表了其高隔离性的特点。

通信成本高:进程间通信(IPC)需通过管道、共享内存、信号、消息队列等机制。

创建开销大:fork()系统调用会复制父进程的上下文。

2.线程

(1)概念

线程是进程中的一个执行单元,是 CPU 调度和分派的基本单位,是进程内的执行单元,共享进程的资源(如内存、文件句柄),但拥有独立的栈和寄存器上下文。

(2)特点

资源共享:线程直接共享进程的内存、全局变量等,通信更高效。

轻量级:线程创建和切换的开销远小于进程。

同步需求:共享资源需通过互斥锁(mutex)、信号量(semaphore) 等机制避免竞态条件。

高风险:一个线程崩溃可能导致整个进程终止(共享地址空间)。

3.进程的状态

运行态(Running)进程正在 CPU 上执行,系统中处于运行态的进程在某一时刻只有一个(单核 CPU),多核 CPU 环境下可以有多个。
就绪态(Ready)进程已经准备好运行,只等待 CPU 资源分配。
阻塞态(Blocked)进程因等待某一事件(如 I/O 操作完成、信号量获取等)而暂时无法继续执行。
停止态(Stopped)进程被暂停执行,通常是收到了特定信号(如 SIGSTOP)。
僵死态(Zombie)进程已经终止,但父进程尚未回收其资源(如进程描述符等)。

4.进程和线程之间的联系与对比

(1)联系:

线程隶属于进程,且同一进程内的线程共享同一个进程ID(PID),但每个线程有唯一的线程ID(TID)

(2)对比:

进程线程
资源分配拥有独立内存空间与系统资源,如文件描述符、打开文件等,进程间资源隔离,一个进程崩溃不影响其他进程,像办公软件进程崩溃不影响浏览器进程。共享所属进程资源,无独立系统资源,但有独立执行栈与程序计数器记录执行状态。

调度

是系统资源分配和调度基本单位,调度时需保存和恢复内存映射、寄存器状态等大量上下文信息,开销大。是 CPU 调度和分派基本单位,因共享进程资源,调度时仅保存和恢复执行栈、程序计数器等少量信息,开销小。

创建、销毁和切换开销

创建要分配独立内存与系统资源,销毁需释放,创建、销毁及切换时保存和恢复大量上下文信息,开销均大。创建和销毁仅分配、释放少量资源,切换时保存和恢复少量上下文信息,开销小且速度快。

通信机制

进程间通信(IPC)依靠管道、消息队列等专门机制,较复杂,要额外同步、互斥操作保证数据安全一致。可直接访问共享内存变量来通信,方式简单高效,但多线程同时访问共享资源易出现数据竞争,需锁等同步机制保障线程安全。

健壮性

进程间资源隔离,健壮性较高,一个进程崩溃通常不影响其他进程。同一进程内线程共享资源,一个线程崩溃可能致使整个进程崩溃,健壮性较低。

二、查看进程状态的相关命令

查看进程状态的命令有(常用):ps、ps ax、ps aux、pgrep、pidof、top

1、ps相关命令(ps、ps ax、ps aux

ps命令的常用参数表

参数说明示例
基础选项
a显示所有用户的进程(包括其他用户)。ps a
x显示无控制终端的进程(如守护进程)。ps x
ax组合使用:显示所有进程(包括无终端的进程)。ps ax
信息控制
-o <字段>自定义输出字段(支持 piduser%cpucommttystat 等)。ps axo pid,user,comm,%cpu
u显示详细资源占用(用户、CPU、内存等,类似 ps aux)。ps aux
-e显示所有进程(等效于 ax,但属于Unix风格参数)。ps -e
筛选过滤
-p <PID>显示指定PID的进程。ps ax -p 1234
-U <用户>显示指定用户的进程。ps ax -U root
-C <命令>按进程名过滤(支持部分匹配)。ps ax -C nginx
--ppid <PID>显示父进程为指定PID的子进程。ps ax --ppid 1
格式化输出
--sort按字段排序(+%cpu 升序,-%mem 降序)。ps ax --sort=-%cpu
-H显示进程层级关系(树形结构)。ps axH
-f显示完整格式(包括命令行参数)。ps axf
线程查看
-L显示线程(LWP列)。ps axL
-T显示线程(SPID列)。ps axT

ps ax的默认输出列

列名说明示例
PID进程的唯一标识符(Process ID)。1234
TTY进程关联的终端设备:
?:无控制终端(如守护进程)。
pts/0:虚拟终端或SSH会话。
? 或 pts/0
STAT进程状态(由多个字符组成,见下方详细说明)。SsR+D
TIME进程累计占用CPU的时间(格式为分钟:秒)。00:0110:23
COMMAND启动进程的命令名称或命令行参数:
[] 表示内核线程。
/usr/bin/nginx[kworker]

 ps aux的默认输出列

列名说明示例
USER进程的所有者(用户账号)。rootnginx
PID进程的唯一标识符(Process ID)。1234
%CPU进程占用CPU的百分比(单位:%),基于最近一次刷新周期内的使用情况。0.599.0
%MEM进程占用物理内存的百分比(单位:%)。2.315.8
VSZ虚拟内存大小(Virtual Memory Size,单位:KB),即进程申请的虚拟内存总量。123456(约123MB)
RSS实际使用的物理内存(Resident Set Size,单位:KB),即进程当前占用的非交换内存。65432(约65MB)
TTY进程关联的终端设备:
?:无控制终端(如守护进程)。
pts/0:虚拟终端或SSH会话。
? 或 pts/0
STAT进程状态(由多个字符组成,见下方详细说明)。SsR+Dl
START进程启动时间(格式为小时:分钟或日期,取决于运行时长)。10:00Jan01
TIME进程累计占用CPU的时间(格式为分钟:秒)。00:01120:45
COMMAND启动进程的命令名称或命令行参数:
[] 表示内核线程。
/usr/bin/nginx[kworker]

2、pgrep

作用:

pgrep 用于根据 进程名、用户、组等条件快速查找进程PID,默认仅输出匹配的进程ID(PID)。
ps/grep组合相比,pgrep更高效且语法简洁。 

pgrep常用参数表

参数说明输出新增内容示例
基础过滤
-u <用户>按用户过滤进程(用户名或UID)。仅PIDpgrep -u root
-G <组>按组过滤进程(组名或GID)。仅PIDpgrep -G www-data
-x精确匹配进程名(需全名匹配)。仅PIDpgrep -x sshd
输出控制
-l显示进程名(与PID一同输出)。进程名1234: nginx
-a显示完整命令行(需结合-l)。完整命令1234: nginx: worker process
-c输出匹配进程的数量(计数)。数字3
-d <分隔符>自定义PID分隔符(默认为换行)。无,格式变化pgrep -d ',' nginx → 1234,5678
信号与状态
-f匹配完整命令行(而非仅进程名)。无,过滤条件变化pgrep -f "nginx -g"
-n仅显示最新(最近启动)的进程PID。仅PIDpgrep -n nginx
-o仅显示最旧(最早启动)的进程PID。仅PIDpgrep -o nginx

 

3、pidof

命令:

pidof 进程名称示例
pidof nginx      # 输出:1234 5678 (多个nginx进程的PID)
pidof sshd       # 输出:8910       (sshd守护进程的PID)

显示单个PID(-s):

pidof -s <进程名>  # 仅返回一个PID(通常是最新的进程)示例
pidof -s python3  # 输出:9999 (最近启动的Python3进程PID)

pidof常用参数表 

参数说明
-s仅返回一个PID(单实例进程适用)。
-c仅返回与当前运行环境相同根目录(chroot)下的进程PID。
-x同时匹配执行该脚本的Shell进程PID(用于脚本文件)。
-o <PID>排除指定PID的进程(可多次使用,如 -o 1234 -o 5678)。
-d <分隔符>自定义PID分隔符(默认是空格)。

4、top

概念:

top 是 Linux 系统中用于 实时监控系统资源使用情况和进程状态 的核心命令行工具。它能动态显示 CPU、内存、交换分区、进程负载等关键指标,帮助用户快速定位性能瓶颈。

(1)top 的核心功能
① 实时刷新:

默认每 3 秒更新一次数据(可配置)。

② 多维度展示:
系统资源概览:

CPU、内存、负载、运行时间等。

进程列表:

按资源占用排序的进程详情(PID、用户、CPU、内存等)。

③ 交互式操作:

支持动态排序、筛选、终止进程等操作。

(2)top内容详解(实例演示)

第一行:系统时间、运行时长、登录用户数、平均负载。

第二行:进程总数及状态统计(运行、睡眠、停止、僵尸)。

第三行:CPU 使用率(用户态 us、内核态 sy、空闲 id、等待I/O wa 等)。

第四行:物理内存使用情况(总量、空闲、已用、缓存)。

第五行:交换分区使用情况。

关键字眼:

PID:进程ID。

USER:进程所有者。

%CPU:CPU 占用百分比。

%MEM:物理内存占用百分比。

VIRT:虚拟内存总量(KB)。

RES:实际物理内存占用(KB)。

SHR:共享内存大小(KB)。

S:进程状态(R=运行, S=睡眠, Z=僵尸等)。

TIME+:累计 CPU 占用时间。

三、进程的前/后台调用

<ctrl>+<z>

在终端中,当一个进程正在前台运行并占用着 shell 时,按下 Ctrl + Z 组合键可以将该进程暂停并打入后台挂起。此时,进程处于停止状态,但并未终止,它会释放对终端的控制权,让用户可以在 shell 中继续输入其他命令。

bg

用于将后台挂起的进程在后台运行起来。

fg

用于把后台进程调回前台。

命令 &

在命令后面加上 &,可以让该命令对应的进程在后台运行。

jobs

命令用于查看当前 shell 中在后台的所有工作,即显示所有后台进程的信息,包括进程的编号、状态以及对应的命令等。

四、进程的优先级

1、概念

在 Linux 系统中,进程优先级决定了进程获取 CPU 时间的顺序。优先级高的进程会更频繁地被调度执行,这对系统性能调优和资源管理至关重要。

2、优先级种类

(1)概念

进程也分为“可控的”和“不可控的”,“可控”,说明进程可以被用户或管理员进行修改或手动设置,这种即为静态优先级,而“不可控”,即不能被用户或管理员进行修改等操作,由系统内核根据进程的运行状态来调整(如等待时间、CPU 使用率),优化调度公平性,避免低优先级进程长期饥饿,这种即为动态优先级。

(2)静态优先级的调节

用户通过 nice 或 renice 设置,范围 -20(最高)到 19(最低),能直接影响普通进程的初始调度权重。

nice值
        nice值用来调整控制进程优先级的,nice值越低(越负),优先级就越高;Nice 值范围:-20(最高优先级)到 19(最低优先级),默认值为 0

命令格式:

nice -n <调整值> <命令>   # 调整值为目标 Nice 值与默认值(0)的差值

示例  :

解释:用指定权限-5来打开cat命令 

renice值

 renice命令可以修改进程的nice值,如renice -5 3595,其中 -5 为你想要修改的nice值为多少,后面的编号3595即为进程编号

Tips:查看进程编号可以用监视(watch)来监控进程的pid,即可看到进程编号,也可以用vim &来查看

命令格式:

renice -5(想要修改的nice值) 16410(进程编号)

(3)进程状态字符解释

字符说明
R进程正在运行或在就绪队列中等待 CPU 分配。
S可中断睡眠:等待事件完成(如 I/O 操作、信号)。
D不可中断睡眠:通常等待硬件操作(如磁盘 I/O),不能被信号中断。
Z僵尸进程:进程已终止,但其退出状态未被父进程回收。
T进程被作业控制信号(如 SIGSTOPSIGTSTP)暂停。
t进程被调试器暂停(如通过 ptrace 跟踪)。
X进程完全终止(极少见,通常瞬间消失)。
<高优先级:进程的 Nice 值为负(优先级高于默认)。
N低优先级:进程的 Nice 值为正(优先级低于默认)。
s会话领导者:进程是会话(Session)的首进程(如 Shell 进程)。
l多线程:进程是多线程的(有多个轻量级进程 LWP)。
+前台进程组:进程属于终端的前台进程组(可接收输入)。
L锁定内存:进程将部分内存锁定(如通过 mlock 避免换出)。
I空闲进程:内核线程处于空闲状态(某些系统显示为 I)。

五、进程信号

1.概念:

进程信号是操作系统用于在进程之间传递事件通知的一种机制,它可以让操作系统、其他进程或进程自身向某个进程发送信号,以通知该进程发生了特定的事件,进程接收到信号后会根据信号的类型和自身的状态做出相应的反应。

2.用户可控制的进程信号(表格)

信号名称信号值默认行为典型用途可否捕获/忽略
SIGHUP1终止进程通知进程重新加载配置(如 nginx -s reload)。
SIGINT2终止进程用户按下 Ctrl+C 中断前台进程。
SIGQUIT3终止进程并生成核心转储用户按下 Ctrl+\ 强制终止并调试(生成 core dump)。
SIGKILL9强制终止进程无条件终止进程(无法被捕获或忽略)。
SIGTERM15终止进程请求进程正常退出(允许清理资源),默认的 kill 信号。
SIGSTOP17,19,23暂停进程暂停进程(不可被捕获或忽略),用户按下 Ctrl+Z(实际发送 SIGTSTP)。
SIGCONT18,25,26继续运行恢复被暂停的进程(如 bg/fg 命令)。
SIGTSTP20暂停进程用户按下 Ctrl+Z 暂停前台进程(可捕获处理)。
SIGUSR110终止进程用户自定义用途(如通知进程切换日志文件)。
SIGUSR212终止进程用户自定义用途(如通知进程更新配置)。

3、控制进程信号的命令

(1)killall命令

该命令可以向内核询问一个进程存不存在,如:

killall -<信号名或值> <进程名>     # 向所有同名进程发送信号如
killall -0(信号编号) gedit(进程的名字或编号)

其中的 -0 位为信号编号,且有许多其他数字代表,但用户可以控制的常用信号只有代码这些(上面的表有详细的介绍):-1  -2  -3  -15  -9  -18  -19  -20

(2)kill命令

kill可以精准的将一个进程杀死(结束)如:

kill -<信号名或值> <PID>          # 向指定 PID 发送信号如
kill -9(信号编号) 16410(进程的名字或编号)

(3)pkill命令

pkill -<信号名或值> <模式>         # 按模式匹配进程并发送信号

pkill可以终止一个用户

我们先创建一个用户test来测试pkill命令,并登录上此test用户

另起一个终端命令行,输入pkill命令

六、systemd守护进程

1.概念

守护进程(Daemon)是一种在后台持续运行的特殊进程,它不与终端直接交互,通常在系统启动 时自动启动,并在系统关闭时才停止。

2.作用

守护进程的设计目的是为系统提供各种服务,例如网络服务(如 HTTP 服务器、FTP 服务器)、日 志服务、定时任务服务等。它们默默地在后台运行,为其他进程和用户提供支持,确保系统的正常 运行。

3.特性(核心)

特性说明
无控制终端脱离终端运行(TTY 显示为 ?),不接收用户直接输入。
后台运行默默执行任务,不占用用户交互界面。
独立会话创建新会话(Session)并成为会话领导者(Session Leader)。
脱离父进程通过两次 fork() 脱离原进程,由 init(PID=1)接管。
固定工作目录通常将工作目录设置为根目录(/)或特定目录(如 /var/run)。
日志输出将标准输入/输出重定向到文件(如 /var/log)或 syslog

4.常用命令表

命令作用示例
systemctl start <服务名>启动服务sudo systemctl start nginx
systemctl stop <服务名>停止服务sudo systemctl stop sshd
systemctl restart <服务名>重启服务sudo systemctl restart mysql
systemctl reload <服务名>重新加载配置(不重启服务)sudo systemctl reload nginx
systemctl status <服务名>查看服务状态systemctl status docker
systemctl enable <服务名>启用开机自启sudo systemctl enable httpd
systemctl disable <服务名>禁用开机自启sudo systemctl disable postfix
systemctl is-enabled <服务名>检查服务是否开机自启systemctl is-enabled cron
systemctl mask <服务名>禁用服务(阻止手动或自动启动)sudo systemctl mask apache2
systemctl unmask <服务名>解除禁用sudo systemctl unmask apache2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)

本文提供一个适用于图像输入的多头注意力机制&#xff08;Multi-Head Attention&#xff09;PyTorch 实现&#xff0c;适用于 ViT、MAE 等视觉 Transformer 中的注意力计算。 模块说明 输入支持图像格式 (B, C, H, W)内部转换为序列 (B, N, C)&#xff0c;其中 N H * W多头注…

每日一题(小白)字符串娱乐篇16

分析题意可以了解到本题要求在一串字符串中找到所有组合起来排序递增的字符串。我们可以默认所有字符在字符串中的上升序列是1&#xff0c;从第一个字符开始找&#xff0c;如果后面的字符大于前面的字符就说明这是一个上序列那么后面字符所在的数组加一&#xff0c;如果连接不上…

Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(Xinference方式)

一、安装步骤 1.基础环境安装 安装显卡驱动、cuda&#xff0c;根据自己硬件情况查找相应编号&#xff0c;本篇不介绍这部分内容&#xff0c;只给出参考指令&#xff0c;详情请读者自行查阅互联网其它参考资料。 sudo apt install nvidia-utils-565-server sudo apt install…

Immutable.js 完全指南:不可变数据的艺术与实践

引言 在现代前端开发中&#xff0c;状态管理是一个核心挑战。随着应用复杂度增加&#xff0c;如何高效、安全地管理应用状态变得至关重要。Immutable.js 是 Facebook 推出的一个 JavaScript 库&#xff0c;它提供了持久化不可变数据结构&#xff0c;可以帮助开发者更好地管理应…

字符串数据类型的基本运算

任务描述 本关任务&#xff1a;从后台输入任意三个字符串&#xff0c;求最大的字符串。 相关知识 字符串本身是存放在一块连续的内存空间中&#xff0c;并以’\0’作为字符串的结束标记。 字符指针变量本身是一个变量&#xff0c;用于存放字符串的第 1 个字符的地址。 字符数…

Ubuntu 22.04 一键部署openManus

openManus 前言 OpenManus-RL,这是一个专注于基于强化学习(RL,例如 GRPO)的方法来优化大语言模型(LLM)智能体的开源项目,由来自UIUC 和 OpenManus 的研究人员合作开发。 前提要求 安装deepseek docker方式安装 ,windows 方式安装,Linux安装方式

PDF 转图片,一行代码搞定!批量支持已上线!

大家好&#xff0c;我是程序员晚枫。今天我要给大家带来一个超实用的功能——popdf 现在支持 PDF 转图片了&#xff0c;而且还能批量操作&#xff01;是不是很激动&#xff1f;别急&#xff0c;我来手把手教你玩转这个功能。 1. 一行代码搞定单文件转换 popdf 的核心就是简单暴…

《比特城的机密邮件:加密、签名与防篡改的守护之战》

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 第一章&#xff1a;风暴前的密令 比特城的议会大厅内&#xff0c;首席长老艾德文握着一卷足有半人高的羊皮纸&#xff0c;眉头紧锁。纸上是即将颁布的《新纪元法典》——这份文件不仅内…

8.用户管理专栏主页面开发

用户管理专栏主页面开发 写在前面用户权限控制用户列表接口设计主页面开发前端account/Index.vuelangs/zh.jsstore.js 后端Paginator概述基本用法代码示例属性与方法 urls.pyviews.py 运行效果 总结 欢迎加入Gerapy二次开发教程专栏&#xff01; 本专栏专为新手开发者精心策划了…

http://noi.openjudge.cn/_2.5基本算法之搜索_1804:小游戏

文章目录 题目深搜代码宽搜代码深搜数据演示图总结 题目 1804:小游戏 总时间限制: 1000ms 内存限制: 65536kB 描述 一天早上&#xff0c;你起床的时候想&#xff1a;“我编程序这么牛&#xff0c;为什么不能靠这个赚点小钱呢&#xff1f;”因此你决定编写一个小游戏。 游戏在一…

发生梯度消失, 梯度爆炸问题的原因,怎么解决?

目录 一、梯度消失的原因 二、梯度爆炸的原因 三、共同的结构性原因 四、解决办法 五、补充知识 一、梯度消失的原因 梯度消失指的是在反向传播过程中&#xff0c;梯度随着层数的增加指数级减小&#xff08;趋近于0&#xff09;&#xff0c;导致浅层网络的权重几乎无法更新…

【USRP】srsRAN 开源 4G 软件无线电套件

srsRAN 是SRS开发的开源 4G 软件无线电套件。 srsRAN套件包括&#xff1a; srsUE - 具有原型 5G 功能的全栈 SDR 4G UE 应用程序srsENB - 全栈 SDR 4G eNodeB 应用程序srsEPC——具有 MME、HSS 和 S/P-GW 的轻量级 4G 核心网络实现 安装系统 Ubuntu 20.04 USRP B210 sudo …

ChatGPT 4:解锁AI文案、绘画与视频创作新纪元

文章目录 一、ChatGPT 4的技术革新二、AI文案创作&#xff1a;精准生成与个性化定制三、AI绘画艺术&#xff1a;从文字到图像的神奇转化四、AI视频制作&#xff1a;自动化剪辑与创意实现五、知识库与ChatGPT 4的深度融合六、全新的变革和机遇《ChatGPT 4 应用详解&#xff1a;A…

在js中数组相关用法讲解

数组 uniqueArray 简单数组去重 /*** 简单数组去重* param arr* returns*/ export const uniqueArray <T>(arr: T[]) > [...new Set(arr)];const arr1 [1,1,1,1 2, 3];uniqueArray(arr); // [1,2,3]uniqueArrayByKey 根据 key 数组去重 /*** 根据key数组去重* …

RT-Thread ulog 日志组件深度分析

一、ulog 组件核心功能解析 轻量化与实时性 • 资源占用&#xff1a;ulog 核心代码仅需 ROM<1KB&#xff0c;RAM<0.2KB&#xff0c;支持在资源受限的MCU&#xff08;如STM32F103&#xff09;中运行。 • 异步/同步模式&#xff1a;默认采用异步环形缓冲区&#xff08;rt_…

T113s3远程部署Qt应用(dropbear)

T113-S3 是一款先进的应用处理器&#xff0c;专为汽车和工业控制市场而设计。 它集成了双核CortexTM-A7 CPU和单核HiFi4 DSP&#xff0c;提供高效的计算能力。 T113-S3 支持 H.265、H.264、MPEG-1/2/4、JPEG、VC1 等全格式解码。 独立的硬件编码器可以编码为 JPEG 或 MJPEG。 集…

12.青龙面板自动化我的生活

安装 docker方式 docker run -dit \ -v /root/ql:/ql/data \ -p 5700:5700 \ -e ENABLE_HANGUPtrue \ -e ENABLE_WEB_PANELtrue \ --name qinglong \ --hostname qinglong \ --restart always \ whyour/qinglongk8s方式 https://truecharts.org/charts/stable/qinglong/ he…

Maven 远程仓库推送方法

步骤 1&#xff1a;配置 pom.xml 中的远程仓库地址 在项目的 pom.xml 文件中添加 distributionManagement 配置&#xff0c;指定远程仓库的 URL。 xml 复制 <project>...<distributionManagement><!-- 快照版本仓库 --><snapshotRepository><id…

Spring Boot 日志 配置 SLF4J 和 Logback

文章目录 一、前言二、案例一&#xff1a;初识日志三、案例二&#xff1a;使用Lombok输出日志四、案例三&#xff1a;配置Logback 一、前言 在开发 Java 应用时&#xff0c;日志记录是不可或缺的一部分。日志可以记录应用的运行状态、错误信息和调试信息&#xff0c;帮助开发者…

JS API 事件监听

焦点事件案例&#xff1a;搜索框激活下拉菜单 事件对象 事件对象存储事件触发时的相关信息 可以判断用户按键&#xff0c;点击元素等内容 如何获取 事件绑定的回调函数中的第一个形参就是事件对象 一般命名为e,event 事件对象常用属性 type类型 click mouseenter client…