当前位置: 首页 > news >正文

Linux笔记---进程:进程状态

1. Linux中的进程状态

上图是操作系统学科中,对进程状态的分类。但是这样细致的划分是在操作系统的设计层面上做的,其中的很多细节,用户其实不必关心。 

在Linux操作系统中,面向用户层面,对进程状态做了如下的划分:

/*
*The task state array is a strange "bitmap" of
*reasons to sleep. Thus "running" is zero, and
*you can test for combinations of others with
*simple bit tests.
*/
static const char *const task_state_array[] = {"R (running)", /*0 */"S (sleeping)", /*1 */"D (disk sleep)", /*2 */"T (stopped)", /*4 */"t (tracing stop)", /*8 */"X (dead)", /*16 */"Z (zombie)", /*32 */
};
  1. “R (running)” - 运行状态(0):表示进程正在CPU上执行指令或者在就绪队列中等待CPU资源以便执行。处于这个状态的进程要么正在占用CPU进行计算,要么即将获得CPU时间片来运行。
  2. “S (sleeping)” - 睡眠状态(1):进程正在等待某个事件的发生,例如等待I/O操作完成(如读取磁盘文件、等待网络数据到达等)。在这种状态下,进程不会占用CPU资源,而是将CPU让给其他可运行的进程,直到被等待的事件发生(如数据准备好)才会被唤醒重新进入就绪状态或者直接运行。
  3. “D (disk sleep)” - 磁盘睡眠状态(2):这是一种特殊的睡眠状态,进程正在等待磁盘I/O操作完成。与普通睡眠状态不同的是,处于“D”状态的进程不能被轻易杀死(即使使用kill命令发送信号),因为这样可能会导致磁盘数据不一致。例如,当进程正在向磁盘写入重要数据时,如果被强制终止,可能会破坏文件系统的完整性。
  4. “T (stopped)” - 停止状态(4):进程接收到特定的信号(如SIGSTOP信号)而被暂停执行。这个状态下的进程不会继续运行,直到收到SIGCONT信号来恢复执行。例如,调试器可能会发送SIGSTOP信号使进程停止,以便进行调试操作,调试完成后再发送SIGCONT信号使进程继续运行。
  5. “t (tracing stop)” - 跟踪停止状态(8):当进程被调试器或跟踪工具跟踪时,可能会处于这种状态。在这种状态下,进程的执行被暂停以便进行跟踪和调试相关的操作,例如查看进程的变量值、执行路径等。与“T (stopped)”状态类似,它也需要特定的信号来恢复执行。
  6. “X (dead)” - 死亡状态(16):进程已经结束执行,并且已经释放了大部分资源,但是可能还有一些内核资源(如进程描述符的部分内容)正在被清理。这个状态是进程生命周期的最后阶段,一旦清理完成,进程就完全从系统中消失。
  7. “Z (zombie)” - 僵尸状态(32):进程已经执行完毕,但是父进程还没有调用wait或waitpid等函数来回收子进程的资源(如进程的退出状态码等)。在这种状态下,子进程的进程描述符仍然存在于内核中,占用少量的系统资源。僵尸进程是一种需要注意的情况,因为如果大量的僵尸进程存在,可能会消耗过多的系统资源。

进程处于某个状态,实际上就是其task_struct结点被加入对应的队列。

例如,准备就绪等待运行或正在运行的程序就被添加到运行队列;等待外部设备进行I/O操作的进程就被添加到对应设备的等待队列 依次进行I/O操作。

2. 查看进程状态

ps aux / ps axj 
  • a:显示一个终端所有的进程,包括其他用户的进程。
  • x:显示没有控制终端的进程,例如后台运行的守护进程。
  • j:显示进程归属的进程组ID、会话ID、父进程ID,以及与作业控制相关的信息。
  • u:以用户为中心的格式显示进程信息,提供进程的详细信息,如用户、CPU和内存使用情况等。

 结合head、grep等指令,我们可以在命令行输入如下指令,以方便地查看指定进程:

ps ajx | head -1; ps ajx | grep [指定进程的关键字] | grep -v grep

其中,STAT栏描述的就是进程的状态,除了上一模块介绍到的各个状态的标识,这些标识后面通常还会带上一些其他符号以提供更加详细的信息:

  1. <:高优先级进程。
  2. N:低优先级进程。
  3. L:锁定内存页。
  4. s:会话进程组的领头进程。
  5. l:多线程,进程拥有多个线程。
  6. +:前台进程,该进程正在和用户交互。

查看进程状态还可通过top指令完成,在Linux笔记---进程:初识进程-CSDN博客中有详细介绍。 

3. 向进程发送信号

在Linux系统中,向进程发送信号可以通过以下几种方式:

1. 使用 kill 命令

kill 命令是最常用的向进程发送信号的方式。它可以向指定的进程发送指定的信号。例如,要向进程ID为 1234 的进程发送 SIGTERM 信号,可以使用以下命令:

kill -s SIGTERM 1234

或者使用信号编号:

kill -15 1234

使用kill -l指令可以查看有哪些信号:

 1) SIGHUP	     2) SIGINT	     3) SIGQUIT	     4) SIGILL	     5) SIGTRAP6) SIGABRT	     7) SIGBUS	     8) SIGFPE	     9) SIGKILL	    10) SIGUSR1
11) SIGSEGV	    12) SIGUSR2	    13) SIGPIPE	    14) SIGALRM	    15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	    18) SIGCONT	    19) SIGSTOP	    20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	        23) SIGURG	    24) SIGXCPU	    25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	    28) SIGWINCH	29) SIGIO	    30) SIGPWR
31) SIGSYS	34) SIGRTMIN	    35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

这些信号,我们会在之后的文章中再做细致讲解。

2. 使用 pkill 命令

pkill 命令允许通过进程名来杀死一组进程。例如,要杀死所有名为 "firefox" 的进程,可以使用以下命令:

pkill firefox

3. 使用 killall 命令

killall 命令与 pkill 类似,但如果给出的进程名不完整,killall 会报错。例如:

killall -9 firefox

4. 使用系统调用

在C语言中,可以使用 kill 系统调用来向进程发送信号。例如:

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>int main() {pid_t pid = 1234; // 目标进程的PIDint sig = SIGTERM; // 要发送的信号int ret = kill(pid, sig);if (ret == 0) {printf("信号发送成功\n");} else {perror("kill");}return 0;
}

5. 使用键盘快捷键

在终端中,可以使用键盘快捷键向当前前台进程发送信号。例如:

  • Ctrl+C:发送 SIGINT 信号,通常用于终止正在运行的程序。
  • Ctrl+\:发送 SIGQUIT 信号,终止进程并生成核心转储文件。
  • Ctrl+Z:发送 SIGTSTP 信号,暂停进程的执行。

6. 使用函数产生信号

在C语言中,可以使用 raise 函数向当前进程发送信号,或者使用 abort 函数向当前进程发送 SIGABRT 信号,强制使程序异常终止。例如:

#include <signal.h>
#include <stdio.h>int main() {raise(SIGTERM); // 向当前进程发送SIGTERM信号return 0;
}

7. 由软件条件产生信号

例如,当进程执行某些系统调用(如 pause() 或 wait())时,它们可能会因为信号而提前返回。这种机制是基于内核的同步原语和进程的状态管理。

8. 异常产生信号

当进程执行时发生硬件错误或异常,如除以零、访问非法内存地址等,CPU的异常处理机制会触发,内核会为当前进程生成相应的信号。例如,除以零错误会产生 SIGFPE 信号,非法内存访问会产生 SIGSEGV 信号。

请注意,有些信号(如 SIGKILL 和 SIGSTOP)不能被捕获、阻塞或忽略,因为它们是用于确保系统管理员能够控制所有进程的。

4. 僵尸进程

进程执行完毕之后并不会直接消失,而是会进入僵尸状态,并等待其父进程来回收其资源(也就是所谓的“收尸”),因为它要向父进程反馈自身执行任务的信息,例如完成情况、因什么原因退出等。

所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程就进入Z状态。

由于进程的状态等信息是由PCB维护的,进程处于僵尸状态时其代码数据可能会得到释放,但是其PCB不会被释放。在长期运行的项目中,僵尸进程忘记被释放就会导致内存泄露的问题。

在进程运行过程中,父进程创建子进程,子进程结束时,它的部分资源(如进程描述符等)需要被父进程回收。

如果父进程没有及时回收子进程的资源,子进程就会一直处于僵尸状态,并且会一直在等待父进程读取退出状态代码,这可能会导致系统资源的浪费,特别是在有大量子进程产生且父进程没有正确处理子进程结束情况的程序中。

#include <stdio.h>
#include <stdlib.h>
int main()
{pid_t id = fork();if(id < 0) {perror("fork");return 1;} else if (id > 0) { //parentprintf("parent[%d] is sleeping...\n", getpid());sleep(30);}else {printf("child[%d] is begin Z...\n", getpid());sleep(5);exit(EXIT_SUCCESS);} return 0;
}

5. 孤儿进程

与僵尸进程相对的就是孤儿进程,即父进程在子进程之前退出了。

这会导致什么问题呢?很明显,子进程在变成僵尸进程之后没有人为他收尸,我们称其为孤儿进程。这时候就需要有一个进程来领养这个孤儿。

谁来领养呢?1号进程会对孤儿进程进行领养,并负责为其收尸。

在Linux系统中,1号进程通常是指systemd,它是一个系统和服务管理器,负责在系统启动时初始化系统,并启动所有其他系统服务。systemd是现代Linux发行版中最常用的初始化系统,它取代了传统的init进程。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{pid_t id = fork();if (id < 0) {perror("fork");return 1;} else if (id == 0) {//childprintf("I am child, pid : %d\n", getpid());sleep(10);}else {//parentprintf("I am parent, pid: %d\n", getpid());sleep(3);exit(0);} return 0;
}

相关文章:

Linux笔记---进程:进程状态

1. Linux中的进程状态 上图是操作系统学科中&#xff0c;对进程状态的分类。但是这样细致的划分是在操作系统的设计层面上做的&#xff0c;其中的很多细节&#xff0c;用户其实不必关心。 在Linux操作系统中&#xff0c;面向用户层面&#xff0c;对进程状态做了如下的划分&am…...

基于Qt实现的自定义树结构容器:设计与应用

在Qt框架中&#xff0c;尽管其提供了许多强大的容器类&#xff08;如 QList, QMap, QTreeWidget 等&#xff09;&#xff0c;但缺少一个通用的、灵活的树结构容器&#xff0c;直接支持多层级数据管理。为了满足这些需求&#xff0c;本文设计并实现了一个可复用的自定义树结构容…...

Minio 客户端 mc

1、文档参阅&#xff1a; 1.1、 服务别名设置&#xff1a; https://min.io/docs/minio/linux/reference/minio-mc/mc-alias-set.html 1.2、cp 命令 https://min.io/docs/minio/linux/reference/minio-mc/mc-cp.html 2、mc 命令安装 1、wget https://dl.minio.org.cn/cl…...

python控制鼠标,键盘,adb

python控制鼠标&#xff0c;键盘&#xff0c;adb 听说某系因为奖学金互相举报&#xff0c;好像拿不到要命一样。不禁想到几天前老墨偷走丁胖子的狗&#xff0c;被丁胖子逮到。他面对警察的问询面不改色坚持自我&#xff0c;反而是怒气冲冲的丁胖子被警察认为是偷狗贼。我觉得这…...

使用 Python 剪辑视频的播放速度

要使用 Python 调整视频的播放速度&#xff0c;可以利用 moviepy 库中的 fx&#xff08;特效&#xff09;模块来实现这一功能。通过 moviepy.editor 中的 VideoFileClip 类和 fx.speedx 函数&#xff0c;可以轻松地调整视频的播放速度。 安装 moviepy 首先&#xff0c;确保已…...

Scrapy图解工作流程-cnblog

1.1 介绍部分&#xff1a; 文字提到常用的Web框架有Django和Flask&#xff0c;接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分&#xff1a; Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…...

mongodb

MongoDB增加身份验证 - jason47 - 博客园 db.collection.find() - MongoDB 手册 v6.0 1. 登录 rootJTVMbushu104:~# mongosh # 无账号登录 test> use admin # 切换数据库,先切换到有权限数据库再登录授权 switched to db admin admin> db.auth(username,pas…...

海量数据处理面试题

目录 一.位图应用 二.布隆过滤器 三.哈希切割 一.位图应用 1. 给定100亿个整数&#xff0c;设计算法找到只出现一次的整数&#xff1f; 对于这道题100亿个整数大概占用40G,1G2^30byte,所以直接保存是不合适的,可以使用两个位图来处理,用00表示出现0次的,01表示出现一次的,10…...

RNN模型文本预处理--数据增强方法

数据增强方法 数据增强是自然语言处理&#xff08;NLP&#xff09;中常用的一种技术&#xff0c;通过生成新的训练样本来扩充数据集&#xff0c;从而提高模型的泛化能力和性能。回译数据增强法是一种常见的数据增强方法&#xff0c;特别适用于文本数据。 回译数据增强法 定义…...

git-显示顺序与提交顺序不一致的问题

问题流程 a分支 初始记录&#xff1a;分支的提交记录是 c1 -> c2 -> c3第一次修改提交记录但并未push&#xff1a;a1&#xff08;20:18&#xff09;第二次修改提交记录&#xff1a;a2&#xff08;20:20&#xff09; b分支 初始记录&#xff1a; c1 -> c2 -> c3 …...

【软件入门】Git快速入门

Git快速入门 文章目录 Git快速入门0.前言1.安装和配置2.新建版本库2.1.本地创建2.2.云端下载 3.版本管理3.1.添加和提交文件3.2.回退版本3.2.1.soft模式3.2.2.mixed模式3.2.3.hard模式3.2.4.使用场景 3.3.查看版本差异3.4.忽略文件 4.云端配置4.1.Github4.1.1.SSH配置4.1.2.关联…...

基于Springboot的流浪宠物管理系统

基于javaweb的流浪宠物管理系统 介绍 基于javaweb的流浪宠物管理系统的设计与实现&#xff0c;后端框架使用Springbootmybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同权限级别…...

【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决

前言 在日常开发和运维中&#xff0c;为了提高服务器登录的安全性&#xff0c;我们通常会选择使用 SSH 密钥认证 来替代传统的密码登录。然而&#xff0c;在配置 SSH 公钥登录的过程中&#xff0c;可能会遇到各种坑和 Bug。本文将从零开始&#xff0c;手把手教你如何在 Ubuntu…...

使用 VLC 在本地搭建流媒体服务器 (详细版)

提示&#xff1a;详细流程 避坑指南 Hi~&#xff01;欢迎来到碧波空间&#xff0c;平时喜欢用博客记录学习的点滴&#xff0c;欢迎大家前来指正&#xff0c;欢迎欢迎~~ ✨✨ 主页&#xff1a;碧波 &#x1f4da; &#x1f4da; 专栏&#xff1a;音视频 目录 借助VLC media pl…...

常用贴片元件封装尺寸

不论你在什么时候开始&#xff0c;重要的是开始之后就不要停止。 一天过完&#xff0c;不会再来。 每一次发奋努力的背后&#xff0c;必有加倍的赏赐。【SMD贴片元件的封装尺寸】 公制&#xff1a;3216——2012——1608——1005——0603——0402 英制&#xff1a;1206——0805—…...

NVR录像机汇聚管理EasyNVR多个NVR同时管理基于B/S架构的技术特点与能力应用

EasyNVR视频融合平台基于云边端协同设计&#xff0c;能够轻松接入并管理海量的视频数据。该平台兼容性强、拓展灵活&#xff0c;提供了视频监控直播、录像存储、云存储服务、回放检索以及平台级联等一系列功能。B/S架构使得EasyNVR实现了视频监控的多元化兼容与高效管理。 其采…...

【时间之外】IT人求职和创业应知【48】-通信技术

目录 新闻一&#xff1a;腾讯科技取得数据显示相关专利 新闻二&#xff1a;中国5G网络规模全球最大&#xff0c;6G技术取得突破 新闻三&#xff1a;亚马逊启动“登月”计划&#xff0c;部署10万颗二代自研芯片 连亚马逊这样的大厂也搞登月计划&#xff0c;可见现在的业界竞争…...

如何为 XFS 文件系统的 /dev/centos/root 增加 800G 空间

如何为 XFS 文件系统的 /dev/centos/root 增加 800G 空间 一、前言二、准备工作三、扩展逻辑卷1. 检查现有 LVM 配置2. 扩展物理卷3. 扩展卷组4. 扩展逻辑卷四、调整文件系统大小1. 检查文件系统状态2. 扩展文件系统五、处理可能出现的问题1. 文件系统无法扩展2. 磁盘空间不足3…...

Linux命令操作基础

目录 一、命令格式 二、常见命令操作 2.1补齐命令与文件名 2.2历史命令 2.3联机帮助 三、常用命令 四、vim/vi文本编辑器 4.1命令模式 4.2输出模式 4.3底线命令模式 一、命令格式 $ Command [-Options] Argument1 Argument2... 其中&#xff1a; $:默认存在的提示符&a…...

Shell脚本实践练习

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…...

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端 管理的服务器大部分都是CentOS操作系统&#xff0c;版本主要是CentOS 7。因为监控服务器需要&#xff0c;要在前两天搭建的Zabbix 7.0系统上把这些CentOS 7系统都监控起来。因为服务器数量众多&#xff0c;而且有些服务器…...

DDR3与MIG IP核详解(一)

一、ddr3(全称第三代双倍速率同步动态随机存储器)&#xff1a; 1、特点&#xff1a;1&#xff1a;掉电无法保存数据&#xff0c;需要周期性的刷新。2:时钟上升沿和下降沿都会传输数据。 3&#xff1a;突发传输&#xff0c;突发长度 Burst Length一般为…...

转录组数据挖掘(生物技能树)(第11节)下游分析

转录组数据挖掘&#xff08;生物技能树&#xff09;&#xff08;第11节&#xff09; 文章目录 R语言复习转录组数据差异分析差异分析的输入数据操作过程示例一&#xff1a;示例二&#xff1a;示例三&#xff1a;此代码只适用于人的样本 R语言复习 #### 读取 ####dat read.deli…...

CTF-RE 从0到N:Chacha20逆向实战 2024 强网杯青少年专项赛 EnterGame WP (END)

只想解题的看最后就好了,前面是算法分析 Chacha20 c语言是如何利用逻辑运算符拆分变量和合并的 通过百度网盘分享的文件&#xff1a;EnterGame_9acdc7c33f85832082adc6a4e... 链接&#xff1a;https://pan.baidu.com/s/182SRj2Xemo63PCoaLNUsRQ?pwd1111 提取码&#xff1a;1…...

Spring Boot 的 WebClient 实践教程

什么是 WebClient&#xff1f; 在 Spring Boot 中&#xff0c;WebClient 是 Spring WebFlux 提供的一个非阻塞、响应式的 HTTP 客户端&#xff0c;用于与 RESTful 服务或其他 HTTP 服务交互。相比于传统的 RestTemplate&#xff0c;WebClient 更加现代化&#xff0c;具有异步和…...

STM32笔记(串口IAP升级)

一、IAP简介 IAP&#xff08;In Application Programming&#xff09;即在应用编程&#xff0c; IAP 是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写&#xff0c;目的是为了在产品发布后可以方便地通过预留的通信口对产 品中的固件程序进行更新升级。 通常实…...

Ollama - 简化使用本地大语言模型

学习完用 Transformers 和 llama.cpp 使用本地大语言模型后&#xff0c;再继续探索如何使用 Ollama 跑模型。Ollama 让运行和管理大语言模型变得更为简单&#xff0c;它构建在 llama.cpp 之上&#xff0c;并有优化&#xff0c;性能表现同样不俗。下面罗列一下它的特点 从它的 …...

圆域函数的傅里叶变换和傅里叶逆变换

空域圆域函数的傅里叶变换 空域圆域函数&#xff08;也称为空间中的圆形区域函数&#xff09;通常指的是在二维空间中&#xff0c;以原点为中心、半径为 a a a的圆内取值为1&#xff0c;圆外取值为0的函数。这种函数可以表示为&#xff1a; f ( x , y ) { 1 if x 2 y 2 ≤ …...

智能交易模型的全景探索:量化技术的进步与未来

随着金融市场日益复杂化&#xff0c;量化交易模型在投资领域扮演着愈加重要的角色。这些模型通过数据驱动和技术创新&#xff0c;赋能投资者在高度波动的市场中寻找确定性收益点。本文将从技术进步、模型构建、应用优势和未来发展四个方面&#xff0c;探讨量化交易模型的演变与…...

mysql学习

1、 数据库的三范式是什么&#xff1f; 2、特点 - 永久性&#xff1a;从本质上来说数据库中的数据以计算机文件的方式存储在磁盘上- 结构性&#xff1a;数据不是杂乱无章的存储- 大量&#xff1a;只受到磁盘空间的影响 3、 Myisam与innodb的区别 4、mysql架构 开始编程语言进…...

小白新手村冒险之“烤”json串

JSON是什么&#xff1f; JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它基于JavaScript的一个子集&#xff0c;但是JSON是独立于语言的文本格式&#xff0c;许多编…...

SQL基础入门—— 简单查询与条件筛选

在SQL中&#xff0c;查询是从数据库中获取数据的核心操作&#xff0c;而条件筛选是查询中不可或缺的一部分。通过使用条件筛选&#xff0c;我们可以精准地从大量数据中提取我们需要的信息。本节将详细讲解如何使用SQL进行简单查询与条件筛选&#xff0c;包含常见的条件运算符和…...

Java线程池种类及具体应用场景

Java线程池种类及具体应用场景 在实际开发中&#xff0c;选择合适的线程池类型至关重要&#xff0c;不同场景有不同的线程池需求。本文将结合线程池种类和具体应用示例&#xff0c;详细说明每种线程池的使用场景和适用情况。 一、固定大小线程池&#xff08;FixedThreadPool&a…...

3D建筑模型的 LOD 规范

LOD&#xff08;细节层次&#xff09; 是3D城市建模中用于表示建筑模型精细程度的标准化描述不同的LOD适用于不同的应用场景 LOD是3D建模中重要的分级标准&#xff0c;不同层级适合不同精度和用途的需求。 从LOD0到LOD4&#xff0c;细节逐渐丰富&#xff0c;复杂性和精度也逐…...

掌上单片机实验室 — RT - Thread+ROS2 浅尝(26)

前面化解了Micro_ROS通讯问题&#xff0c;并在 RT-Thread Studio 环境下&#xff0c;使用Micro_ROS软件包中的例程&#xff0c;实现了STM32F411CE核心板和ROS2主机的通讯。之后还尝试修改例程 micro_ros_sub_twist.c &#xff0c;实现了接收 turtle_teleop_key 所发出的 turtle…...

同步时序电路——描述

这部分要求了解一些触发器的状态方程&#xff1a; R-S触发器&#xff1a; D触发器&#xff1a; JK触发器&#xff1a; 时序电路&#xff1a;任一时刻的输出既与即刻输入有关(若有输入)&#xff0c;还与电路当时的状态有关(和以前的输入有关)&#xff0c;即电路具有记忆能力。 时…...

.net的winfrom程序 窗体透明打开窗体时出现在屏幕右上角

窗体透明&#xff0c; 将Form的属性Opacity&#xff0c;由默认的100% 调整到 80%&#xff0c;这个数字越小越透明(尽量别低于50%&#xff0c;不信你试试看)&#xff01; 打开窗体时出现在屏幕右上角 //构造函数 public frmCalendarList() {InitializeComponent();//打开窗体&…...

反爬虫机制

许多网站会采取措施来防止爬虫频繁访问或抓取大量内容&#xff0c;这些措施被称为反爬虫机制。常见的反爬手段包括&#xff1a; IP 限制&#xff1a;通过检测频繁访问的 IP 地址&#xff0c;限制该 IP 的访问。 请求频率限制&#xff1a;网站可能通过检测请求间隔过短来判断是…...

ML 系列:第 31 节— 机器学习中的协方差和相关性

文章目录 一、说明二、协方差和相关性2.1 协方差的概念2.1 相关 三、有关关联的高级主题 &#xff08;有关详细信息&#xff09;3.1 相关性和独立性3.2 零相关性和依赖性示例 四、相关性和因果关系五、结论 一、说明 协方差量化了两个随机变量协同变化的程度。当一个变量的较高…...

registry 删除私有仓库镜像

原文链接&#xff1a;https://blog.csdn.net/yogima/article/details/122172744 如果需要彻底删除&#xff0c;只需进行register 磁盘删除镜像 彻底删除了&#xff0c;就可以到达彻底删除的目的。 如果只需要软删除&#xff0c;则只需进行通过API删除。 curl --header "Ac…...

初识java(3)

大家好&#xff0c;今天我们来讲讲我们的老伙计-变量&#xff0c;在哪一门编程语言中&#xff0c;变量的作用都是不可或缺的&#xff0c;那么下面我们就来详细了解一下java中的变量。 一.变量概念 在程序中&#xff0c;除了有始终不变的常量外&#xff0c;有些内容可能会经常…...

前端JavaScript(一)---基本介绍

Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言&#xff0c;主要目的是为了解决服务器端语言&#xff0c;比如Perl&#xff0c;遗留的速度问题&#xff0c;为客户提供更流畅的浏览效果。当时服务端需要对…...

【Linux打怪升级记 | 报错02】-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)

&#x1f5fa;️博客地图 &#x1f4cd;1、报错发现 &#x1f4cd;2、原因分析 &#x1f4cd;3、解决办法 &#x1f4cd;4、测试结果 1、报错发现 装好了CentOS操作系统&#xff0c;使用ssh远程登陆CentOS&#xff0c;出现如下告警信息&#xff1a; bash: 警告:setlocale…...

P1198 [JSOI2008] 最大数

P1198 [JSOI2008] 最大数https://www.luogu.com.cn/problem/P1198 牵制芝士&#xff1a;单调队列 思路&#xff1a; 我们的任务是找出一个区间最大值的 因为插入的数与上一次的答案有关 所以它是强制在线的&#xff08;真无语了&#xff09; 我们可以在每次插入时整一个叫…...

嵌入式串口通信 基于芯片STC8H8K64U 串口通信入门001

引言 差不多有四年的时间没有写csdn的原创文章了。一方面是由于家庭的角色转换,已为人母,家中的很多琐事牵绊了我。另一方面是因为工作确实也非常的忙碌。工作需要,也会不断地学习新的知识和复习旧的知识,思来想去,还是决心把工作中的经验心得和遇到的问题,和各位程序猿朋…...

基于Java的小程序电商商城开源设计源码

近年来电商模式的发展越来越成熟&#xff0c;基于 Java 开发的小程序电商商城开源源码&#xff0c;为众多开发者和企业提供了构建个性化电商平台的有力工具。 基于Java的电子商城购物平台小程序的设计在手机上运行&#xff0c;可以实现管理员&#xff1b;首页、个人中心、用户…...

[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker pull线上镜像方式构建编译环境

T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求&#xff1a; 硬件&#xff1a; 设备容量备注硬盘>500G多版本系统测试&#xff0c;必须固态&#xff0c;否则编译卡死硬盘>300G单系统…...

计算机网络八股整理(二)

计算机网络八股整理&#xff08;二&#xff09; 应用层 1&#xff1a;dns的全称了解过吗&#xff1f; dns全称domain-name-system&#xff0c;翻译过来就是域名系统&#xff0c;是在计算机网络中将域名转换成ip地址的分布式数据库系统&#xff1b; 域名服务器的层级类似一个树…...

华财术_号卡分销平台讲解(四大运营商+手机卡)

【号卡分销平台对比讲解稿】 大家好&#xff0c;今天我们来详细对比几款热门的号卡分销平台&#xff0c;帮助您找到最适合自己的合作伙伴。我们将从佣金结算、数据安全、功能特性、用户体验以及适用人群等多个维度进行剖析&#xff0c;让您一目了然各平台的优劣。 一、号易号…...

fatal error in include chain (rtthread.h):rtconfig.h file not found

项目搜索这个文件 rtconfig 找到后将其复制粘贴到 你的目录\Keil\ARM\ARMCC\include 应该还有cJSON&#xff0c;rtthread.h和 等也复制粘贴下...