【Linux】进程和计划任务

目录

一、进程介绍

1.1 进程与线程的定义

1.1.1 进程(Process)**

1.1.2 线程(Thread)**

1.1.3 进程与线程的区别

1.2 进程的特征

1.3 进程状态

1.3.1 进程的基本状态

1.3.2 进程更多的状态

1.4 进程的优先级

1.5 进程间通信

1.6 进程的分类*

二、进程管理

2.1 查看进程命令

2.1.1 ps——查看进程静态信息

2.1.2 top——查看进程动态信息

2.1.2.1 第一部分解析

2.1.2.2 第二部分解析

2.1.2.3 htop

2.1.3 pgrep——查指定进程信息

2.1.4 pstree——查看进程树**

2.1.5 pidof——通过进程名查看PID号

2.1.6 lsof——系统管理监控、诊断工具

2.2 监控系统资源命令

2.2.1 vmstat——动态查看系统资源使用情况

 2.2.2 iostat——查看每个磁盘的IO性能

2.2.3 iftop——动态查看网络流量

2.3 控制进程命令

2.3.1 启动程序

2.3.2 调整前台程序命令

2.3.3 管理后台任务命令

2.3.4 结束进程

三、计划任务 

3.1 at——一次性任务

3.2 crontab——周期计划


一、进程介绍

程序:执行特定任务的一串代码,静态存放于硬盘中

1.1 进程与线程的定义

1.1.1 进程(Process)**

进程就是运行中的程序的某个实例,是有生命周期的,是资源分配的最小单位。

开启进程会消耗硬件资源,如果硬件资源消耗完,后果造成生产事故。

需要关注的五大性能:

  1. 内存使用率                查看命令:free -h、top
  2. CPU使用率                查看命令:top、ps、w、iostat、uptime
  3. 硬盘容量                    查看命令:df
  4. 硬盘读写性能            查看命令:iostat、vmstat -d
  5. 网络带宽                    查看命令:iftop

1.1.2 线程(Thread)**

线程是进程内的一个执行单元或子任务,是任务调度的基本单位共享所属进程的资源

1.1.3 进程与线程的区别

  • 进程之间相互独立,一个程序的崩溃不会影响其他进程,而一个线程崩溃可能影响整个进程
  • 进程之间需要通信共享数据,线程之间共享内存来共享数据

1.2 进程的特征

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
     
  • 并发性:任何进程都可以同其他进程一起并发执行;
     
  • 独立性:进程是系统进行资源分配和调度的一个独立单位;
     
  • 结构性:进程由程序、数据和进程控制块三部分组成。

1.3 进程状态

1.3.1 进程的基本状态

  • 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
     
  • 就绪状态(等待):进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
     
  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态
     
  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
     
  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
     

1.3.2 进程更多的状态

  • 运行态:running
     
  • 就绪态:ready
     
  • 睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable
     
  • 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
     
  • 僵尸态:zombie,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态的子进程


1.4 进程的优先级

进程优先级分为Priority(PRI) Nice (NI),两者之和为一个进程的最终优先级,越小优先级越高

其中,PRI由内核动态调整,无法被用户修改 ;

NI值则可以被用户所调整,其范围为-20~19,root可以修改负数范围,普通用户只能修改0~19

临时修改NI值:

renice -n -20 2118


1.5 进程间通信

同一主机:

pipe 管道,单向传输             cmd1  |  cmd 2
socket   套接字文件,双工通信
Memory-maped file   文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存
shm shared memory 共享内存
signal 信号
Lock   对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻塞,直到锁被打开
semaphore 信号量,一种计数器
kill 发信号

不同主机:socket=IP和端口号

RPC remote procedure call   远程调用
MQ 消息队列,生产者和消费者,如:Kafka,RabbitMQ,ActiveMQ

1.6 进程的分类*

  • 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
  • 前台进程:跟终端相关,通过终端启动的进程

注意:两者可相互转化

二、进程管理

2.1 查看进程命令

2.1.1 ps——查看进程静态信息

ps命令主要用于显示包含当前运行的各进程完整信息的静态快照。

一般ps的使用场景伴随着选项,不会单独使用。

选项说明
a显示当前终端下的所有进程信息,包括其他用户的进程
u使用以用户为主的格式输出进程信息
x显示当前用户在所有终端下的进程信息

习惯上将上述选项组合在一起使用,如' ps aux ' 或 ' ps -elf '

执行' ps aux '命令后,将以简单列表的形式显示出进程信息。

表头含义
USER该进程是由哪个用户产生的。
PID进程的 ID。
%CPU该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ该进程占用虚拟内存的大小,单位为 KB。进程请求需要的内存大小。
RSS该进程占用实际物理内存的大小,单位为 KB。系统真实分配的内存大小。
TTY该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。?代表和终端无关,系统进程
STAT进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。 -S该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。 -W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。 -Z僵尸进程。进程已经中止,但是还是占用硬件资源。 -<:高优先级(以下状态在 BSD 格式中出现)。 -N:低优先级。 -L:被锁入内存。 -s:包含子进程。 -l:多线程(小写 L)。 -+:位于后台。
START该进程的启动时间。
TIME该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND产生此进程的命令名。

执行' ps -elf '后,则将以长格式显示系统中的进程信息,包括更丰富的内容。

表头含义
F进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限;
S进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID运行此进程的用户的 ID;
PID进程的 ID;
PPID父进程的 ID;
C该进程的 CPU 使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR该进程在内存的哪个位置;
SZ该进程占用多大内存;
WCHAN该进程是否运行。"-"代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用 CPU 的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

2.1.2 top——查看进程动态信息

top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次。 

选项:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;

  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;

  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;

  • -p 进程PID:仅查看指定 ID 的进程;

  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;

  • -u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作

  • ? 或 h:显示交互模式的帮助;

  • c:按照 CPU 的使用率排序,默认就是此选项;

  • M:按照内存的使用率排序;

  • N:按照 PID 排序;

  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;

  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;

  • r:按照 PID 给某个进程重设优先级(Nice)值;

  • q:退出 top 命令;

2.1.2.1 第一部分解析

第一行为任务队列信息,具体内容如表 所示。

内 容说 明
16:10:03系统当前时间
up 7:41系统的运行时间,本机己经运行7小时41分钟
2 users当前登录了两个用户
load average: 0.00,0.01,0.05系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)

第二行为进程信息,具体内容如表

内 容说 明
Tasks: 148 total系统中的进程总数
1 running正在运行的进程数
147 sleeping睡眠的进程数
0 stopped正在停止的进程数
0 zombie僵尸进程数。如果不是 0,则需要手工检查僵尸进程

第三行为 CPU 信息,具体内容如表

内 容说 明
Cpu(s): 1.3 %us用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率
2.0%sy系统模式占用的 CPU 百分比
0.0%ni改变过优先级的用户进程占用的 CPU 百分比
96.7%id空闲 CPU 占用的 CPU 百分比
0.0%wa等待输入/输出的进程占用的 CPU 百分比
0.0%hi硬中断请求服务占用的 CPU 百分比
0.0%si软中断请求服务占用的 CPU 百分比
0.0%stst(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行为物理内存信息,具体内容如表buff cache

内 容说 明
Mem: 1867024k total物理内存的总量,单位为KB
571504k used己经使用的物理内存数量
53840k free空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存
65800k buffers作为缓冲的内存数量

缓冲(buffer)和缓存(cache)的区别:

  • 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
     
  • 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的。

第五行为交换分区(swap)信息,如表

内 容说 明
Swap: 524280k total交换分区(虚拟内存)的总大小
147920 used已经使用的交换分区的大小
524280k free空闲交换分区的大小
409280k cached作为缓存的交换分区的大小

通过 top 命令的第一部分就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15 分钟的平均负载高于 1,则证明系统压力较大。如果 CPU 的使用率过高或空闲率过低,则证明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。

这时,我们就应该判断是什么进程占用了系统资源。如果是不必要的进程,就应该结束这些进程;如果是必需进程,那么我们该増加服务器资源(比如増加虚拟机内存),或者建立集群服务器。

2.1.2.2 第二部分解析

内容说明
PID进程的ID
USER该进程所属的用户
PR优先级,数值越小优先级越高
NI优先级,数值越小、优先级越高
VIRT该进程使用的虚拟内存的大小,单位为 KB
RES该进程使用的物理内存的大小,单位为 KB
SHR共享内存大小,单位为 KB
S进程状态
%CPU该进程占用 CPU 的百分比
%MEM该进程占用内存的百分比
TIME+该进程共占用的CPU时间
COMMAND进程的命令名
2.1.2.3 htop

一种内容更丰富的动态进程信息查看工具

2.1.3 pgrep——查指定进程信息

通过pgrep命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的PID号。

` ps aux | grep "##" `与` pgrep `功能类似

格式

pgrep [选项] 表达式

选项

  • -u: 指定用户
  •  举例:查看zhangsan用户执行了多少进程

    pgrep -u zhangsan | wc -l 
  • -l: 显示进程名

        举例:查看所有包含‘sh’的进程名与PID

pgrep -l sh

  • -a: 显示完整格式的进程名        
pgrep -a "sh"

  • -P pid: 显示指定进程的子进程


2.1.4 pstree——查看进程树**

pstree命令可以输出Linux系统中各种进程的树形结构,更加直观的判断出各进程之间的相互关系

格式

pstree   [OPTION] [ PID | USER ]  

选项

-a	显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程

常用命令举例:

1. 查看进程号为5251的进程

pstree 5251

2. 查看用户为lisi的进程

pstree lisi

3. 显示所有进程的PID

pstree -p

2.1.5 pidof——通过进程名查看PID号

命令格式如下:

pidof [进程名]

2.1.6 lsof——系统管理监控、诊断工具

命令通式:

lsof [选项]
选项功能
-c 字符串只列出以字符串开头的进程打开的文件。
+d 目录名列出某个目录中所有被进程调用的文件。
-u 用户名只列出某个用户的进程打开的文件。
-p pid列出某个 PID 进程打开的文件。
-i :80哪些进程打开了端口号80

误删文件找回

(有人使用的情况下,修复删除文件,否则无用)

 
1. 在~目录下创建一个文件test.txt

2. 使用第二个终端打开此文件,在第一个终端删除该文件

3. 使用lsof | grep deleted 命令查看刚刚被删的文件的PID号

4. 进入/proc/PID号/fd中查看

找到3为刚刚删除的文件

5. 使用cat 3 > ~/test.txt进行文件修复

2.2 监控系统资源命令

2.2.1 vmstat——动态查看系统资源使用情况

命令格式如下:

vmstat [-a] [刷新延时 刷新次数]vmstat 1 3
#使用vmstat检测,每个1秒刷新一次,共刷新3次
选项含义
-fs

-f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。

-s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。

-S 单位令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
-d列出硬盘有关读写总量的统计表。
-p 分区设备文件名查看硬盘分区的读写情况。
字段含义
procs

进程信息字段:

-r:等待运行的进程数,数量越大,系统越繁忙。

-b:不可被唤醒的进程数量,数量越大,系统越繁忙。

memory

内存信息字段:

-swpd:虚拟内存的使用情况,单位为 KB。

-free:空闲的内存容量,单位为 KB。

-buff:缓冲的内存容量,单位为 KB。

-cache:缓存的内存容量,单位为 KB。

swap

交换分区信息字段:

-si:从磁盘中交换到内存中数据的数量,单位为 KB。

-so:从内存中交换到磁盘中数据的数量,单位为 KB。

这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。

io

磁盘读/写信息字段:

-bi:从块设备中读入的数据的总量,单位是块。

-bo:写到块设备的数据的总量,单位是块。

这两个数越大,代表系统的 I/O 越繁忙。

system

系统信息字段:

-in:每秒被中断的进程次数。

-cs:每秒进行的事件切换次数。

这两个数越大,代表系统与接口设备的通信越繁忙。

cpu

CPU信息字段:

-us:非内核进程消耗 CPU 运算时间的百分比。

-sy:内核进程消耗 CPU 运算时间的百分比。

-id:空闲 CPU 的百分比。

-wa:等待 I/O 所消耗的 CPU 百分比。

-st:被虚拟机所盗用的 CPU 百分比

 2.2.2 iostat——查看每个磁盘的IO性能

命令格式:

iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]

常用选项:

-c 只显示CPU行
-d 显示设备〈磁盘)使用状态
-k 以千字节为为单位显示输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标

2.2.3 iftop——动态查看网络流量

2.3 控制进程命令

2.3.1 启动程序

  • 前台启动:通过终端启动,且启动后一直占据终端
     
  • 后台启动:可通过终端启动,但启动后即转入后台运行(释放终端)

2.3.2 调整前台程序命令

  1. 将未启动的前台命令运行于后台​​​​​​​​​​​​​​
     
    command &    #在前台命令后加上&
  2. 将已经运行的前台命令停止并挂在后台
    ping 127.0.0.1    #运行前台命令.........ctrl+z    #在运行时,按ctrl+z

2.3.3 管理后台任务命令

  1. jobs——查看后台任务列表
    jobs
    
  2. fg——调出后台任务
    fg [序号]
  3. bg——继续后台任务
    bg [序号]

2.3.4 结束进程

kill [信号] PID

注意:kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号。

信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号。

三、计划任务 

3.1 at——一次性任务

at [选项] [时间]([HH:MM]、[yyyy-mm-dd])at 15:00 2024-04-17
at> cmd     #编写命令#ctrl+d提交atq    
9 2013-07-26 02:00 a root
#说明root用户有一个at任务在2013年7月26日02:00执行,工作号是9
格式用法
HH:MM比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
Midnight(midnight)代表 12:00 AM(也就是 00:00)。
Noon(noon)代表 12:00 PM(相当于 12:00)。
Teatime(teatime)下午茶代表 4:00 PM(相当于 16:00)。
英文月名 日期 年份比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY比如 011518 表示 2018 年 1 月 15 号。
now+时间以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。

3.2 crontab——周期计划

crontab    [项目]    [file]
选项功能
-u user用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
-e编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i在删除用户的 crontab 文件时,给确认提示。

crontab -e        #进入crontab编辑界面,退出和vim编辑器一样

* * * * *     需要执行任务的命令

项目含义范围
第一个"*"一小时当中的第几分钟(minute)0~59
第二个"*"一天当中的第几小时(hour)0~23
第三个"*"一个月当中的第几天(day)1~31
第四个"*"一年当中的第几个月(month)1~12
第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)

在规定时间时,有几种特殊用法: 

特殊符号含义
*(星号)代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号)代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠)代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线)代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。

在书写 crontab 定时任务时,需要注意以下几个事项:

  1. 5个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间
  2. crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
  3. 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
  4. 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

使用演示:

1. 查看/etc/crontab文件来查看配置信息,且编写执行命令

PATH表示编写命令时,可以使用哪些相对路径下的命令,若命令不在PATH中需要输入绝对路径。


2. 编写完后,查看crontab中的执行任务,并且观察是否执行成功

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

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

相关文章

SpringBoot项目创建及简单使用

目录 一.SpringBoot项目 1.1SpringBoot的介绍 1.2SpringBoot优点 二.SpringBoot项目的创建 三.注意点 一.SpringBoot项目 1.1SpringBoot的介绍 Spring是为了简化Java程序而开发的&#xff0c;那么SpringBoot则是为了简化Spring程序的。 Spring 框架&#xff1a; Spring…

【UKE!】2024.4.19

2024.4.19 【你知道的都是真相。只可惜那些并不是真相的全部。】 Friday 三月十一 谷雨 <BGM “谷雨–音阙诗听”> AC :Answer Coarse,粗劣的答案 ​ CE :Compile Easily,轻松通过 ​ PC :Perfect Compile 完美的编译 ​ WA :Wonderful Answer,好答案 ​ RE :Run Exce…

【InternLM 实战营第二期作业04】XTuner微调LLM:1.8B、多模态、Agent

基础作业 训练自己的小助手认知 1.环境安装 安装XTuner 源码 # 如果你是在 InternStudio 平台&#xff0c;则从本地 clone 一个已有 pytorch 的环境&#xff1a; # pytorch 2.0.1 py3.10_cuda11.7_cudnn8.5.0_0studio-conda xtuner0.1.17 # 如果你是在其他平台&#x…

SpringSecurity源码分析3--UserDetail部分

前言&#xff1a;本章提及的类都是与用户名、密码相关的类 UserDetailsService.class 用于加载用户信息 DaoAuthenticationProvider.class 将数据库的信息拿出来进行认证 AbstractUserDetailsAuthenticationProvider.class DaoAuthenticationProvider的父类&#xff0c;通过模…

【FreeRTOS】RTOS任务的同步与互斥:(二)信号量

【FreeRTOS】RTOS任务的同步与互斥&#xff1a;&#xff08;二&#xff09;信号量 信号量概念二值信号量二值信号量概念二值信号量相关API函数二值信号量的案例设计cubeMX配置软件程序设计 计数型信号量计数型信号量概念计数型信号量相关API函数二值信号量的案例设计cubeMX配置…

VUE 页码分页封装

VUE 页码封装组件 pagination/index.vue &#xff1a; <template><div class"pagination-contianer"><el-pagination background layout"prev, pager, next" :total"total" current-change"currentChange"> </e…

点赞列表查询列表

点赞列表查询列表 BlogController GetMapping("/likes/{id}") public Result queryBlogLikes(PathVariable("id") Long id) {return blogService.queryBlogLikes(id); }BlogService Override public Result queryBlogLikes(Long id) {String key BLOG_…

零基础小白如何自学网络安全(入门)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

从数据库中到处所有表的列、注释、类型、是否必填等信息

从数据库中到处所有中文表名、英文表名、所有列、注释、类型、长度、是否必填等信息&#xff0c;效果如下&#xff1a; 要实现上面的表格可以直接用SQL实现&#xff0c;实现SQL如下&#xff1a; #查询SQL select* FROMinformation_schema.COLUMNS as columns left join (sele…

【Jenkins PipeLine】Jenkins PipeLine 联动参数示例

目录 1. Pipeline script&#xff1a; 1.1.代码说明&#xff1a; 2. 实现效果&#xff1a; 3.联动说明&#xff1a; 4.Jenkins安装插件 1. Pipeline script&#xff1a; properties([parameters([[$class: "ChoiceParameter", choiceType: "PT_SINGLE_SELE…

在mini2440上编写linux应用程序、字符设备驱动程序的编写与编译

在mini2440上编写linux应用程序 结合前两篇的学习&#xff0c;一个linux操作系统已经在mini2440上运行起来了&#xff0c;结合交叉编译环境和nfs等工具&#xff0c;我们可以在mini2440上编写任何我们在linux系统编程中学到的应用程序。一个简要的多文件Makefile文件如下&#…

数组*巴巴拉拉

一&#xff0c;数组的定义以及创建方式 数组的作用&#xff1a;数组可以把一组数据的集合存放在单个变量下 创建数组有两种方式&#xff1a; 1.利用new创建数组 var arr new Array() 2.利用数组字面量创建数组(常用) var arr [] 注意点&#xff1a;数组里可以存放任…

2013–2022年福建漳江口互花米草分布无人机遥感数据集

文章目录 摘要数据集内容数据集命名方式数据引用与参考文献引用 摘要 本数据集利用无人机搭载可见光相机&#xff0c;获取福建漳江口湿地2013-2022年期间的航拍影像&#xff0c;通过影像拼接生成整个研究区的正射影像&#xff0c;制作十年尺度的遥感影像数据集及互花米草空间数…

C++初阶学习第一弹——C++入门(上)

前言&#xff1a; 很高兴&#xff0c;从今天开始&#xff0c;我们就要步入C的学习了&#xff0c;在这之前我们已经对C语言有了不错的了解&#xff0c;对数据结构也有了一些自己的认识&#xff0c;今天开始&#xff0c;我们就进入这个新的主题的学习——C 目录 一、C的发展即其特…

【C语言】多字节字符、宽字符(涉及字符集和编码)

字符集、编码&#xff1a; 字符集&#xff1a;一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称&#xff0c;包括各国家文字、标点符号、图形符号、数字等。例如&#xff1a;ASCII、Unicode、GB2312、GBK、GB18030、BIG5(繁体中文) ... 编码方式&#xff1a;符号…

【Flutter】自动生成图片资源索引插件一:FlutterAssetRefGenerator

介绍 FlutterAssetRefGenerator 插件&#xff1a;windows上 点击生成图片索引按钮后&#xff0c;pubspec.yaml 会出现中文乱码&#xff0c;需要手动改乱码&#xff1b;mac上没问题。 优点&#xff1a;点击图标自动生成。 目录 介绍一、安装二、使用 一、安装 安装FlutterAsset…

移动端不居中问题/安卓和ios下line-height上下居中 css兼容问题

移动端开发过程&#xff0c;经常会写带0.5px边框角标类的样式&#xff0c;直接使用border设置0.5px边框&#xff0c;ios有些机型会出现显示不完整的情况。所以改用伪元素方法实现边框。代码如下&#xff1a; .comment-entry::after{content: ;position: absolute;left: 0;top: …

Python 中 + 和 += 赋值操作的性能比较

1. 问题背景 在 Python 中&#xff0c;我们可以通过 和 … 完成累加操作&#xff0c;在实际开发过程中我们一般会优先选择 &#xff0c;然而最近在对比 和 … 的性能时出现了 反而更慢的现象。因此&#xff0c;我们决定对此问题进行深入探讨。 2. 解决方案 为了准确地…

C语言---贪吃蛇(一)---准备工作

文章目录 前言1.Win32 API介绍1.1.Win32 API1.2. 控制台程序1.3.控制台屏幕上的坐标[COORD](https://learn.microsoft.com/zh-cn/windows/console/coord-str)1.4.[GetStdHandle](https://learn.microsoft.com/zh-cn/windows/console/getstdhandle)1.5.[GetConsoleCursorInfo](h…

视频太大怎么压缩变小?8种方法随时压缩视频大小

视频太大怎么压缩变小&#xff1f;视频压缩方式分为两种&#xff0c;有损压缩和无损压缩&#xff0c;什么是有损什么是无损压缩&#xff0c;什么时候视频用无损压缩更好&#xff1f;什么时候用有损压缩更好&#xff1f;如何调整视频参数实现基本无损压缩&#xff1f; 今天就借助…