linux中的进程以及进程管理
程序和进程的区别和联系
程序(Program):
- 程序是一组指令的集合,通常存储在磁盘或其他存储设备上,是一种静态的概念。
- 程序本身并没有运行,它只是一个可执行的文件或脚本,包含了一系列的指令和数据。
- 程序可以是编译后的可执行文件(如
.exe文件)、脚本文件(如.sh、.py等)、动态链接库等形式。
进程(Process):
- 进程是程序在运行过程中的一个实例,是操作系统分配资源的基本单位。
- 每个进程都有独立的内存空间,包括代码段、数据段、堆栈等。
- 一个进程对应着一个执行中的程序
总而言之:
程序是静态的,存储在磁盘或其他存储设备中;而进程是动态的,是程序在运行时的实例。程序是概念上的代码和数据集合;进程是程序实际运行时的实体,具有独立的状态和资源。
那线程又是什么呢?
线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程的一个实体。与进程不同的是,同属于一个进程内的多个线程共享相同的内存空间和系统资源,包括地址空间、文件描述符和其他进程的资源。一个进程中的线程可以被理解为程序的多线程,每个线程可以执行程序中的不同部分或者并行执行相同的代码段。所以,进程中的线程可以被称为程序的多线程,它们共同完成程序在计算机上的并发执行。多线程程序的主要优势在于可以提高程序的并发性和响应能力。
进程相关命令总览

ps 命令(列出来的信息是静态的)
ps -ef(列出当前系统中所有进程的详细信息)

在输出中,每一列的含义通常如下:
- UID:进程的用户ID,表示该进程是由哪个用户启动的。
- PID:进程ID,是唯一标识系统中每个进程的数字。
- PPID:父进程ID,指示启动(创建)该进程的父进程的ID。
- C:CPU使用的累计时间(单位为分钟)。如果进程使用的CPU时间超过999分钟,它会显示为
999:00。 - STIME:进程启动的时间或日期。
- TTY:终端设备,如果没有分配终端,显示
?。 - TIME:进程消耗的CPU时间。
- CMD:启动进程的命令行命令。
其中,1号进程通常指的是init进程或systemd
具体解释如下:
init进程:在传统的Unix系统中,init进程是所有进程的祖先,其进程ID通常为1。它是系统启动时由内核启动的第一个进程,并且负责启动和管理所有其他进程。init进程的职责包括系统的初始化、服务的启动和关闭等。
systemd:在许多现代Linux发行版中,init进程已经被systemd所取代。systemd是一个系统和服务管理器,它负责启动、管理和监控系统上运行的进程、服务和资源。类似于传统的init进程,systemd的进程ID也通常是1。
这些进程(init或systemd)在Linux系统中起着非常重要的作用,它们是系统的第一个用户空间进程,负责初始化系统环境并确保其他进程能够正常运行。
TTY的解释
TTY列显示了该进程的终端设备。如果一个进程没有被分配到任何终端,TTY列会显示为?。
通常来说守护进程,后台作业,系统服务有关的进程一般都不分配任何终端。一个进程没有分配到任何终端(TTY列显示为?),意味着它不与当前用户的任何终端会话直接关联。这种情况下,它通常是一个独立运行的进程,可能是一个守护进程、后台作业或系统服务。这并不意味着它没有其他进程依附或依赖,只是它不接受来自用户终端的交互。
更通俗来讲意思是:当进程没有分配到任何终端(TTY列显示为?),即使用户在任何终端上输入命令或者进行其他操作,也不会影响到这个进程的正常执行。这种进程通常是独立运行的后台进程或者服务,它们不依赖于用户的交互来运行或者完成任务。这种设计使得系统可以同时运行一些不需要用户干预的服务或者任务,例如网络服务、定时任务等。

这里看到的几个进程被分配了终端pts/0,那么在pts/0这个终端中可以对这些进程进行操作和管理,影响这些进程的执行。
我们可以在
pts/0这个终端中对这些进程进行操作和管理,例如:
查看进程状态:您可以使用
ps、top或其他系统监控工具来查看进程的状态。发送信号:您可以使用
kill命令向进程发送信号,如SIGINT(中断信号,通常用于终止进程)或SIGTERM(终止信号)。终止进程:如果进程没有响应其他信号,您可以使用
kill -9发送SIGKILL信号强制终止进程。重定向输入输出:您可以将进程的输入输出重定向到文件或其他设备,以便于记录或进一步处理。
交互式操作:对于交互式进程,您可以在终端中与它们进行交互,例如输入命令或数据。
脚本和自动化:您可以在终端中运行脚本或自动化任务,这些任务可能会启动、监控或管理其他进程。
下面我们会提到这里说的对于进程管理的一些操作
ps aux(列出系统中进程的详细资源使用情况)
在 ps aux 输出中,每一列的含义如下:
- USER:启动该进程的用户名。
- PID:进程的唯一标识符,即进程ID。
- %CPU:该进程占用的CPU时间百分比。
- %MEM:该进程占用的内存百分比。
- VSZ:进程使用的虚拟内存大小(单位:KB)。
- RSS:进程占用的实际物理内存大小(单位:KB)。
- TTY:该进程关联的终端设备(tty)。
- STAT:进程状态代码:
- S:睡眠状态(sleep)
- R:运行状态(running)
- Z:僵尸状态(zombie)
- D:不可中断的睡眠状态(uninterruptible sleep)
- T:停止状态(stopped)
- W:无法使用交换机(paging)
- <:高优先级进程
- N:低优先级进程
- L:有些页被锁在内存中
- +:前台进程组的成员
- START:进程启动时间或者启动日期。
- TIME:该进程累计占用CPU的时间。
- COMMAND:启动进程时使用的命令行。

ps ajx(也是列出进程相关信息,这里不细讲)
可以用man ps 查看更多内容
pstree命令
pstree 命令用于以树形结构显示进程的层次关系。它将当前系统中所有进程按照它们的父子关系组织起来,从而形成一棵树状结构,以清晰和直观的方式展示进程之间的层次关系。
-
显示进程层次结构:以树形图的形式展示当前系统中所有进程的层次关系。这样可以清晰地看出每个进程的父进程和子进程。
-
显示进程的终端关系:在树状结构中,
pstree还会显示每个进程的关联终端(TTY),有助于了解哪些进程是由特定的终端启动的。
pstree命令的常见选项
-
-p: 显示进程的PID(进程ID)。默认情况下,pstree只显示进程的名字,使用-p选项可以显示进程名字和PID。示例:pstree -p
-
-u: 显示进程的所有者。显示每个进程的所有者用户名。示例:pstree -u
-
-l: 使用长格式显示。显示更详细的信息,包括命令行参数。示例:pstree -l
-
-h: 在输出中高亮当前用户启动的进程。有助于区分不同用户启动的进程。示例:pstree -h
-
-A: 使用ASCII字符绘制树状结构。在文本终端中显示时更加清晰。示例:pstree -A
-
-T: 显示每个进程的终端(TTY)。示例:pstree -T
-
-c: 不压缩相同的子进程。在显示子进程时,不合并相同的进程。示例:pstree -c
top 命令(动态监视系统进程)
top命令是一个用于动态监视系统进程活动的命令行工具,它能够实时显示系统中各个进程的资源占用情况。并且支持用户动态切换显示方式,例如按 CPU 使用率排序、按内存使用率排序等各种功能。
top命令可以类比于Windows下的任务管理器,它会以指定的时间间隔刷新并显示当前系统中运行的进程信息。
退出监测方法
想要退出去,按下按键q就可以。

测试top命令查看进程资源的一个示例
创建while死循环
为了测试查看top和后面对进程控制的一些操作,这里我们创建一个while死循环让它在电脑上面运行。

这条命令 gcc while.c -o while 是在编译一个名为 while.c 的 C 语言源代码文件,并将编译输出的可执行文件命名为 while。
然后通过./while来执行这个可执行文件。或者通过/home/linux/while完整路径来执行,这里执行可执行文件的时候并不像cd/cat等命令一样,cd/cat当前路径下的文件夹可以不加./,这里执行当前路径下的可执行文件不加./可能会执行不了。

执行了文件之后由于这里是一个死循环,可以看到回车键不会出现新的让我们输入命令的地方,除非我们中断这个程序进程(可以使用ctrl+c,或者后面即将介绍的kill命令)
监测while进程资源占用
显然我们这里就是想要看一下在while程序进程执行中的进程资源信息,但是由于程序死循环执行,可以看到回车键不会出现新的让我们输入命令的地方,我们应该怎么做?
其实很简单,我们可以打开一个新的终端窗口,在这里我们可以输入其他命令。
新建新的终端窗口可以有如下方法:
1.
点击图片左上角的+号
2. Ctrl + Shift + T:这个组合键会在当前终端窗口中打开一个新的标签页(tab)。如果你需要在同一个终端窗口中打开多个终端实例,可以重复按下这个组合键来创建多个标签页。
这个达到的效果是和第一种方法效果一样。
3.Ctrl + Alt + T:这个组合键通常会在当前的桌面环境中打开一个新的终端窗口。每次按下这个组合键,都会打开一个新的终端窗口实例。相当于新开了一个小窗口,效果如下:
现在我们便可以在另一个终端窗口中输入top命令,来实时监测while进程占用资源情况

top命令的选项
-
-p pid[,pid...]: 仅显示指定进程 ID(PID)的进程信息,多个 PID 之间用逗号分隔。
-
-u username: 显示指定用户名(username)的进程信息,仅显示该用户的进程。
如果不知道某个进程的pid号呢?
那么我们可以通过ps -ef来查看
top显示翻页
由于屏幕限制,肯定是显示不完全所有进程的,可以通过>和<来进行翻页,还有通过上下箭头可以逐条增加向下或者向上翻
kill 命令(给指定的进程发送信号)
常见linux信号介绍

这些是常见的信号名称和对应的编号。每个信号都有特定的含义和用途,比如 SIGTERM 用于正常终止进程,SIGKILL 用于强制终止进程等。ctrl+c对应的就是2号信号SIGINT。当程序不采取自定义的信号处理器情况下,这里信号中除了个别的信号(如17-20等),其他绝大多数信号都能杀死对方进程。
自定义信号处理器
在 Linux 中,可以通过信号处理器(Signal Handler)来自定义程序对接收到信号的响应方式。信号处理器允许程序在接收到信号时执行特定的处理函数或逻辑,而不是简单地终止或忽略信号。它可以捕获并处理,从而改变默认行为。
信号处理器是嵌入在程序内部的。在 Unix/Linux 系统中,每个进程都有自己的信号处理机制
特别介绍一下9号信号
信号处理器无法捕捉或者阻塞它,所以也不能改变这个信号的默认行为
在 Unix/Linux 系统中,信号 9 是
SIGKILL,而其他的 kill 信号如SIGTERM(15号信号) 和SIGINT(2号信号) 在作用和影响上有显著的不同:
SIGKILL (
kill -9):
- 强制终止:SIGKILL 是一个强制终止信号,它会立即终止目标进程,无论进程的当前状态如何。即使进程正在执行某些关键操作或者阻塞,SIGKILL 也会将其强制终止。
- 不能被捕获或忽略:进程无法捕获或者忽略 SIGKILL 信号。这是因为 SIGKILL 不像其他信号一样可以被处理或者阻塞,它对目标进程来说是不可忽略的终止请求。
其他 kill 信号 (
SIGTERM,SIGINT等):
- 软件终止信号:这些信号是软件终止信号,通常用于请求目标进程优雅地终止。比如,
kill命令默认发送的是SIGTERM(15号信号),它请求进程进行清理操作并安全地退出。- 可以被捕获或忽略:进程可以选择捕获或者忽略这些信号。通过信号处理器,进程可以在收到
SIGTERM或SIGINT时执行特定的清理操作,然后退出。总结起来,主要区别在于
SIGKILL是一个无法被阻止或者处理的强制终止信号,而其他 kill 信号则是可处理的软件终止请求信号,可以让进程在退出前进行必要的清理工作。
让程序在后台运行
.while/ &这个命令的效果是启动名为 while 的可执行程序,并使其在后台运行,让你可以继续在同一个终端或命令行窗口中执行其他命令,而不必等待 while 程序执行完毕。
程序后台执行的特点:
不阻塞终端或命令行:后台执行的程序不会占用当前终端或命令行窗口,这意味着你可以继续在同一终端执行其他命令,而不必等待该程序完成。
信号处理:后台程序仍然可以接收和处理信号。比如,它可以接收到
Ctrl+C信号(SIGINT),并根据程序中的信号处理程序进行处理。这种灵活性允许程序在后台运行时,仍然可以对外部输入做出响应。输出处理:后台程序的标准输出(stdout)、标准错误输出(stderr)通常被重定向到特定的位置,如
/dev/null或者其他文件。这样可以避免在终端上看到大量输出,尤其是对于长时间运行的程序或者守护进程来说特别有用。
这样看来,对于上面 监测while进程资源占用的示例我们可以不用打开新的终端窗口,只需要来让这个程序后台执行,也能top看到while进程信息。
后台执行的程序对于ctrl+c发送的2号信号和使用kill发送的二号信号接收不一样。
对于后台运行的程序,它的信号处理能力取决于多个因素:
Ctrl+C(SIGINT)信号:
- 当程序在后台运行时,默认情况下,终端是不会将
Ctrl+C发送给后台进程的,而是发送给前台进程。- 如果你希望在后台运行的程序能够接收
Ctrl+C信号,可以使用一些工具或技术,例如nohup或者将程序以某种方式放置在可以接收信号的环境中。kill 命令发送的信号:
- 使用
kill命令可以向后台运行的程序发送不同的信号,例如kill -TERM <pid>发送 SIGTERM 信号(默认的终止信号)。- 无论程序是在前台还是后台运行,
kill命令都可以向其发送信号,除非该信号被特定条件阻止。总结来说,后台运行的程序通常可以接收信号,但是
Ctrl+C是一个特例,需要特殊处理才能使后台程序接收到该信号。默认情况下ctrl+c发送的信号后台运行程序进程接收不到,而kill命令发送2号信号的功能并不受前后台状态的限制。下面我们将来学习如何使用kill给进程发送信号。
kill命令的使用
kill -l 查看所有信号名称
kill 1234 终止进程(会向进程号为 1234 的进程发送默认的终止信号(SIGTERM))
kill -9 5678 会向进程发送信号编号9对应的信号
kill -s SIGTERM 5678 (如果是指定信号名称而不是信号编号,需要加上-s,指定信号编号的话加不加-s都可以)
需要注意的是:填写的必须是要kill发送信号的进程标识号,不能是进程名字,进程号才是一个进程的唯一标识,运行相同程序对应的进程可能有好几个。不知道进程号,就用ps -ef查询
killall 进程名称(可以杀死这个一个名称对应的多个进程)了解一下,平时用的不多
nice命令(设置新进程优先级)
nice 命令用于置新的进程的优先级。在Linux系统中,每个进程都有一个优先级,这决定了它在系统资源分配中的优先程度。较高的优先级使得进程更可能更早地获得CPU时间片,从而更快地执行任务。
nice命令是系统管理员和高级用户优化进程调度的一个有用工具,但对于普通用户来说,使用频率可能不高。
想要了解nice命令的作用效果,首先来看一下top命令显示的结果中的项

我这里仅仅截取了详细进程信息。
- 每一行都代表一个进程,包括以下列:
- PID:进程的唯一标识符。
- USER:启动该进程的用户名。
- PR:进程的优先级。
- NI:进程的nice值,表示其调度优先级的偏移量。
- VIRT:进程使用的虚拟内存量。
- RES:进程当前使用的物理内存量(Resident Set Size)。
- SHR:进程使用的共享内存量。
- S:进程的状态(例如,R表示运行,S表示睡眠,Z表示僵尸)。
- %CPU:进程使用的CPU时间占总CPU时间的百分比。
- %MEM:进程使用的物理内存占总内存的百分比。
- TIME+:自进程启动以来已使用的累计CPU时间。
我们在这里主要看 PR和NI,他们两个的值范围都是-20-+20,PR越大该进程优先级越高,反之越低。NI则是值越大该进程优先级越低,反之越高。我们使用nice命令调整的是NI的值,但是PR也会随之变化,比如调大了NI,PR就变小,调小了NI,PR就变大。
我们可以将NI看为这个进程的好人值,好人值越大,说明该进程是个好人,将资源都让给了其他进程,让其他进程优先执行。反之,说明该进程是个坏人,将资源都抢了过来,让自己优先执行。
nice -n 10 long_running_task & //这会将执行long_running_task的进程的NI设置为 5。
sudo nice -n -5 top_priority_task & //这会将执行long_running_task的进程的NI设置为-5,优先执行。
这里优先级调低不需要sudo,优先级调高需要sudo,不然大家都抢资源不就乱套了吗?
renice命令(动态调整运行进程优先级)
renice 15 -p PID //这会将进程号为 PID 的进程的NI设置为 15。
sudo renice 15 -p PID //这会将进程号为 PID 的进程的NI设置为 -5。,优先执行。
nice和renice区别
nice命令:
- 设置新进程的优先级:在启动新进程时,可以使用
nice命令设置进程的优先级,即调整进程的 nice 值。- 避免竞争:可以通过
nice命令降低新进程的优先级,以避免新进程占用过多的 CPU 资源,从而保持系统的响应性和稳定性。
renice命令:
- 调整运行中进程的优先级:对于已经在运行的进程,使用
renice命令可以调整其优先级。- 动态调整:通过
renice可以在系统运行时根据需要调整进程的优先级,以响应实时的系统负载变化或者优化资源分配。
相关文章:
linux中的进程以及进程管理
程序和进程的区别和联系 程序(Program): 程序是一组指令的集合,通常存储在磁盘或其他存储设备上,是一种静态的概念。程序本身并没有运行,它只是一个可执行的文件或脚本,包含了一系列的指令和数…...
pyecharts可视化案例大全(11~20)
pyecharts可视化案例大全(11~20) 十一、设置动画效果十二、直方图带视觉组件十三、设置渐变色(线性渐变)十四、设置渐变色(径向渐变)十五、设置分割线十六、设置分隔区域十七、面积图十八、堆叠面积图十九、自定义线样式二十、折线图平滑处理十一、设置动画效果 在图表加载前…...
Docker在人工智能领域的应用与实战
摘要 人工智能(AI)技术的快速发展带来了对高效开发和部署工具的需求。Docker作为一个创新的容器化平台,为AI领域提供了强大的支持。本文详细介绍了Docker在AI模型开发、训练、部署以及服务器集群管理等方面的应用,并探讨了其在数…...
python基础篇(8):异常处理
在Python编程中,异常是程序运行时发生的错误,它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误,并进行适当的处理,从而避免程序崩溃。 1 错误类型 代码的错误一般会有语法错误和异常错误两种,语法错…...
FortiClient 用IPsec VPN 远程拨号到FortiGate说明文档
说明:本文档针对IPsec VPN 中的Remote VPN 进行说明,即远程用户使用PC中的FortiClient软件,通过VPN拨号的方式连接到公司总部FortiGate设备,访问公司内部服务器。在配置之前需要统一VPN策略和参数,如模式… 说明&#…...
Git-Unity项目版本管理
目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理,并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…...
每日一题~ leetcode 402 (贪心+单调栈)
click me! 这个贪心的推导在leetcode上已经很明确了。 click me! 删除k个数,可以先考虑删除一个数。这也是一种常见的思路。(如果进行同样的操作多次,可以先只 考虑一次操作如何实现,或者他的影响。完成这一次操作后,…...
设计模式之模版方法
模版方法介绍 模版方法(Template Method)模式是一种行为型设计模式,它定义了一个操作(模板方法)的基本组合与控制流程,将一些步骤(抽象方法)推迟到子类中,使得子类可以在…...
docker部署redis/mongodb/
一、redis 创建/root/redis/conf/redis.conf 全部执行命令如下 docker run -it -d --name redis -p 6379:6379 --net mynet --ip 172.18.0.9 -m 400m -v /root/redis/conf:/usr/local/etc/redis -e TXAsia/Shangehai redis redis-server /usr/local/etc/redis/redis.conf 部署…...
LeetCode 581. 最短无序连续子数组
更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 581. 最短无序连续子数组,难度中等。 排序 解题思路:首先对数组排序,然后找出两侧顺序的数组&#x…...
数据库可视化管理工具dbeaver试用及问题处理。
本文记录了在内网离线安装数据库可视化管理工具dbeaver的过程和相关问题处理方法。 一、下载dbeaver https://dbeaver.io/download/ 笔者测试时Windows平台最新版本为:dbeaver-ce-24.1.1-x86_64-setup.exe 二、安装方法 一路“下一步”即可 三、问题处理 1、问…...
29、php实现和为S的两个数字(含源码)
题目:php 实现 和为S的两个数字 描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数, 是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测…...
Spring Boot中的全局异常处理
Spring Boot中的全局异常处理 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中实现全局异常处理,这是保证应用…...
中英双语介绍美国苹果公司(Apple Inc.)
中文版 苹果公司简介 苹果公司(Apple Inc.)是一家美国跨国科技公司,总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一,苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…...
C语言牢大坠机
目录 开头程序程序的流程图《牢大坠机》结尾 开头 大家好,我叫这是我58,今天,我们要来看关于牢大坠机的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define HIGH 66 #include <stdio.h> #include <Windows.h> int ma…...
zdppy+vue3+antd 实现表格单元格编辑功能
初步实现 <template><a-button class"editable-add-btn" style"margin-bottom: 8px" click"handleAdd">Add</a-button><a-table bordered :data-source"dataSource" :columns"columns"><templa…...
elasticsearch索引怎么设计
Primary Shard(主分片) Primary Shard(主分片)是索引数据存储的基本单位,承担着数据写入和查询的职责。以下是关于Primary Shard的一些关键点: 1. 数据分布:每个索引在创建时会被分成多个主分…...
React 中 useState 和 useReducer 的联系和区别
文章目录 使用场景使用 useState使用 useReducer 联系区别用法状态更新逻辑适用场景可读性和可维护性 使用场景 使用 useState 状态逻辑简单。只涉及少量的状态更新。需要快速和简单的状态管理。 使用 useReducer 状态逻辑复杂。涉及多个子状态或多种状态更新逻辑。需要更好…...
Linux 定时任务详解:全面掌握 cron 和 at 命令
Linux 定时任务详解:全面掌握 cron 和 at 命令 Linux 系统中定时任务的管理对于运维和开发人员来说都是至关重要的。通过定时任务,可以在特定时间自动执行脚本或命令,提高系统自动化程度。本文将详细介绍 Linux 中常用的定时任务管理工具 cr…...
力扣考研经典题 反转链表
核心思想 头插法: 不断的将cur指针所指向的节点放到头节点之前,然后头节点指向cur节点,因为最后返回的是head.next 。 解题思路 1.如果头节点是空的,或者是只有一个节点,只需要返回head节点即可。 if (head null …...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...


