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

linux中的进程以及进程管理

程序和进程的区别和联系

程序(Program)

  • 程序是一组指令的集合,通常存储在磁盘或其他存储设备上,是一种静态的概念。
  • 程序本身并没有运行,它只是一个可执行的文件或脚本,包含了一系列的指令和数据。
  • 程序可以是编译后的可执行文件(如.exe文件)、脚本文件(如.sh.py等)、动态链接库等形式。

进程(Process)

  • 进程是程序在运行过程中的一个实例,是操作系统分配资源的基本单位
  • 每个进程都有独立的内存空间,包括代码段、数据段、堆栈等。
  • 一个进程对应着一个执行中的程序

总而言之:

程序是静态的,存储在磁盘或其他存储设备中;而进程是动态的,是程序在运行时的实例。程序是概念上的代码和数据集合;进程是程序实际运行时的实体,具有独立的状态和资源。

那线程又是什么呢?

线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程的一个实体。与进程不同的是,同属于一个进程内的多个线程共享相同的内存空间和系统资源,包括地址空间、文件描述符和其他进程的资源。一个进程中的线程可以被理解为程序的多线程,每个线程可以执行程序中的不同部分或者并行执行相同的代码段。所以,进程中的线程可以被称为程序的多线程,它们共同完成程序在计算机上的并发执行。多线程程序的主要优势在于可以提高程序的并发性和响应能力

进程相关命令总览

ps 命令(列出来的信息是静态的)

ps -ef(列出当前系统中所有进程的详细信息)

在输出中,每一列的含义通常如下:

  1. UID:进程的用户ID,表示该进程是由哪个用户启动的。
  2. PID:进程ID,是唯一标识系统中每个进程的数字。
  3. PPID:父进程ID,指示启动(创建)该进程的父进程的ID。
  4. C:CPU使用的累计时间(单位为分钟)。如果进程使用的CPU时间超过999分钟,它会显示为 999:00
  5. STIME:进程启动的时间或日期。
  6. TTY:终端设备,如果没有分配终端,显示 ?
  7. TIME:进程消耗的CPU时间。
  8. CMD:启动进程的命令行命令。

其中,1号进程通常指的是init进程systemd

具体解释如下:

  1. init进程:在传统的Unix系统中,init进程是所有进程的祖先,其进程ID通常为1。它是系统启动时由内核启动的第一个进程,并且负责启动和管理所有其他进程。init进程的职责包括系统的初始化、服务的启动和关闭等。

  2. systemd:在许多现代Linux发行版中,init进程已经被systemd所取代。systemd是一个系统和服务管理器,它负责启动、管理和监控系统上运行的进程、服务和资源。类似于传统的init进程,systemd的进程ID也通常是1。

这些进程(init或systemd)在Linux系统中起着非常重要的作用,它们是系统的第一个用户空间进程,负责初始化系统环境并确保其他进程能够正常运行。

TTY的解释 

TTY列显示了该进程的终端设备。如果一个进程没有被分配到任何终端,TTY列会显示为?。

通常来说守护进程,后台作业,系统服务有关的进程一般都不分配任何终端。一个进程没有分配到任何终端(TTY列显示为?),意味着它不与当前用户的任何终端会话直接关联。这种情况下,它通常是一个独立运行的进程,可能是一个守护进程、后台作业或系统服务。这并不意味着它没有其他进程依附或依赖,只是它不接受来自用户终端的交互。

更通俗来讲意思是:当进程没有分配到任何终端(TTY列显示为?),即使用户在任何终端上输入命令或者进行其他操作,也不会影响到这个进程的正常执行。这种进程通常是独立运行的后台进程或者服务,它们不依赖于用户的交互来运行或者完成任务。这种设计使得系统可以同时运行一些不需要用户干预的服务或者任务,例如网络服务、定时任务等。

这里看到的几个进程被分配了终端pts/0,那么在pts/0这个终端中可以对这些进程进行操作和管理,影响这些进程的执行。

我们可以在pts/0这个终端中对这些进程进行操作和管理,例如:

  1. 查看进程状态:您可以使用pstop或其他系统监控工具来查看进程的状态。

  2. 发送信号:您可以使用kill命令向进程发送信号,如SIGINT(中断信号,通常用于终止进程)或SIGTERM(终止信号)。

  3. 终止进程:如果进程没有响应其他信号,您可以使用kill -9发送SIGKILL信号强制终止进程。

  4. 重定向输入输出:您可以将进程的输入输出重定向到文件或其他设备,以便于记录或进一步处理。

  5. 交互式操作:对于交互式进程,您可以在终端中与它们进行交互,例如输入命令或数据。

  6. 脚本和自动化:您可以在终端中运行脚本或自动化任务,这些任务可能会启动、监控或管理其他进程。

下面我们会提到这里说的对于进程管理的一些操作

ps aux(列出系统中进程的详细资源使用情况)

ps aux 输出中,每一列的含义如下:

  1. USER:启动该进程的用户名。
  2. PID:进程的唯一标识符,即进程ID。
  3. %CPU:该进程占用的CPU时间百分比。
  4. %MEM:该进程占用的内存百分比。
  5. VSZ:进程使用的虚拟内存大小(单位:KB)。
  6. RSS:进程占用的实际物理内存大小(单位:KB)。
  7. TTY:该进程关联的终端设备(tty)。
  8. STAT:进程状态代码:
    • S:睡眠状态(sleep)
    • R:运行状态(running)
    • Z:僵尸状态(zombie)
    • D:不可中断的睡眠状态(uninterruptible sleep)
    • T:停止状态(stopped)
    • W:无法使用交换机(paging)
    • <:高优先级进程
    • N:低优先级进程
    • L:有些页被锁在内存中
    • +:前台进程组的成员
  9. START:进程启动时间或者启动日期。
  10. TIME:该进程累计占用CPU的时间。
  11. COMMAND:启动进程时使用的命令行。

ps ajx(也是列出进程相关信息,这里不细讲)

可以用man ps 查看更多内容

pstree命令

pstree 命令用于以树形结构显示进程的层次关系。它将当前系统中所有进程按照它们的父子关系组织起来,从而形成一棵树状结构,以清晰和直观的方式展示进程之间的层次关系。

  1. 显示进程层次结构:以树形图的形式展示当前系统中所有进程的层次关系。这样可以清晰地看出每个进程的父进程和子进程。

  2. 显示进程的终端关系:在树状结构中,pstree 还会显示每个进程的关联终端(TTY),有助于了解哪些进程是由特定的终端启动的。

pstree命令的常见选项

  1. -p: 显示进程的PID(进程ID)。默认情况下,pstree 只显示进程的名字,使用 -p 选项可以显示进程名字和PID。

    示例:pstree -p

  2. -u: 显示进程的所有者。显示每个进程的所有者用户名。

    示例:pstree -u

  3. -l: 使用长格式显示。显示更详细的信息,包括命令行参数。

    示例:pstree -l

  4. -h: 在输出中高亮当前用户启动的进程。有助于区分不同用户启动的进程。

    示例:pstree -h

  5. -A: 使用ASCII字符绘制树状结构。在文本终端中显示时更加清晰。

    示例:pstree -A

  6. -T: 显示每个进程的终端(TTY)。

    示例:pstree -T

  7. -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命令的选项

  1. -p pid[,pid...]: 仅显示指定进程 ID(PID)的进程信息,多个 PID 之间用逗号分隔。

  2. -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号信号) 在作用和影响上有显著的不同:

  1. SIGKILL (kill -9):

    • 强制终止:SIGKILL 是一个强制终止信号,它会立即终止目标进程,无论进程的当前状态如何。即使进程正在执行某些关键操作或者阻塞,SIGKILL 也会将其强制终止。
    • 不能被捕获或忽略:进程无法捕获或者忽略 SIGKILL 信号。这是因为 SIGKILL 不像其他信号一样可以被处理或者阻塞,它对目标进程来说是不可忽略的终止请求。
  2. 其他 kill 信号 (SIGTERM, SIGINT 等):

    • 软件终止信号:这些信号是软件终止信号,通常用于请求目标进程优雅地终止。比如,kill 命令默认发送的是 SIGTERM (15号信号),它请求进程进行清理操作并安全地退出。
    • 可以被捕获或忽略:进程可以选择捕获或者忽略这些信号。通过信号处理器,进程可以在收到 SIGTERM 或 SIGINT 时执行特定的清理操作,然后退出。

总结起来,主要区别在于 SIGKILL 是一个无法被阻止或者处理的强制终止信号,而其他 kill 信号则是可处理的软件终止请求信号,可以让进程在退出前进行必要的清理工作。

 让程序在后台运行

.while/ &这个命令的效果是启动名为 while 的可执行程序,并使其在后台运行,让你可以继续在同一个终端或命令行窗口中执行其他命令,而不必等待 while 程序执行完毕。

程序后台执行的特点:

  1. 不阻塞终端或命令行:后台执行的程序不会占用当前终端或命令行窗口,这意味着你可以继续在同一终端执行其他命令,而不必等待该程序完成。

  2. 信号处理:后台程序仍然可以接收和处理信号。比如,它可以接收到 Ctrl+C 信号(SIGINT),并根据程序中的信号处理程序进行处理。这种灵活性允许程序在后台运行时,仍然可以对外部输入做出响应。

  3. 输出处理:后台程序的标准输出(stdout)、标准错误输出(stderr)通常被重定向到特定的位置,如 /dev/null 或者其他文件。这样可以避免在终端上看到大量输出,尤其是对于长时间运行的程序或者守护进程来说特别有用。

这样看来,对于上面 监测while进程资源占用的示例我们可以不用打开新的终端窗口,只需要来让这个程序后台执行,也能top看到while进程信息。

后台执行的程序对于ctrl+c发送的2号信号和使用kill发送的二号信号接收不一样。

对于后台运行的程序,它的信号处理能力取决于多个因素:

  1. Ctrl+C(SIGINT)信号

    • 当程序在后台运行时,默认情况下,终端是不会将 Ctrl+C 发送给后台进程的,而是发送给前台进程。
    • 如果你希望在后台运行的程序能够接收 Ctrl+C 信号,可以使用一些工具或技术,例如 nohup 或者将程序以某种方式放置在可以接收信号的环境中。
  2. 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中的进程以及进程管理

程序和进程的区别和联系 程序&#xff08;Program&#xff09;&#xff1a; 程序是一组指令的集合&#xff0c;通常存储在磁盘或其他存储设备上&#xff0c;是一种静态的概念。程序本身并没有运行&#xff0c;它只是一个可执行的文件或脚本&#xff0c;包含了一系列的指令和数…...

pyecharts可视化案例大全(11~20)

pyecharts可视化案例大全(11~20) 十一、设置动画效果十二、直方图带视觉组件十三、设置渐变色(线性渐变)十四、设置渐变色(径向渐变)十五、设置分割线十六、设置分隔区域十七、面积图十八、堆叠面积图十九、自定义线样式二十、折线图平滑处理十一、设置动画效果 在图表加载前…...

Docker在人工智能领域的应用与实战

摘要 人工智能&#xff08;AI&#xff09;技术的快速发展带来了对高效开发和部署工具的需求。Docker作为一个创新的容器化平台&#xff0c;为AI领域提供了强大的支持。本文详细介绍了Docker在AI模型开发、训练、部署以及服务器集群管理等方面的应用&#xff0c;并探讨了其在数…...

python基础篇(8):异常处理

在Python编程中&#xff0c;异常是程序运行时发生的错误&#xff0c;它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误&#xff0c;并进行适当的处理&#xff0c;从而避免程序崩溃。 1 错误类型 代码的错误一般会有语法错误和异常错误两种&#xff0c;语法错…...

FortiClient 用IPsec VPN 远程拨号到FortiGate说明文档

说明&#xff1a;本文档针对IPsec VPN 中的Remote VPN 进行说明&#xff0c;即远程用户使用PC中的FortiClient软件&#xff0c;通过VPN拨号的方式连接到公司总部FortiGate设备&#xff0c;访问公司内部服务器。在配置之前需要统一VPN策略和参数&#xff0c;如模式… 说明&#…...

Git-Unity项目版本管理

目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理&#xff0c;并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…...

每日一题~ leetcode 402 (贪心+单调栈)

click me! 这个贪心的推导在leetcode上已经很明确了。 click me! 删除k个数&#xff0c;可以先考虑删除一个数。这也是一种常见的思路。&#xff08;如果进行同样的操作多次&#xff0c;可以先只 考虑一次操作如何实现&#xff0c;或者他的影响。完成这一次操作后&#xff0c;…...

设计模式之模版方法

模版方法介绍 模版方法&#xff08;Template Method&#xff09;模式是一种行为型设计模式&#xff0c;它定义了一个操作&#xff08;模板方法&#xff09;的基本组合与控制流程&#xff0c;将一些步骤&#xff08;抽象方法&#xff09;推迟到子类中&#xff0c;使得子类可以在…...

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 每日更新。 组队打卡&#xff0c;更多解法等你一起来参与哦&#xff01; LeetCode 581. 最短无序连续子数组&#xff0c;难度中等。 排序 解题思路&#xff1a;首先对数组排序&#xff0c;然后找出两侧顺序的数组&#x…...

数据库可视化管理工具dbeaver试用及问题处理。

本文记录了在内网离线安装数据库可视化管理工具dbeaver的过程和相关问题处理方法。 一、下载dbeaver https://dbeaver.io/download/ 笔者测试时Windows平台最新版本为&#xff1a;dbeaver-ce-24.1.1-x86_64-setup.exe 二、安装方法 一路“下一步”即可 三、问题处理 1、问…...

29、php实现和为S的两个数字(含源码)

题目&#xff1a;php 实现 和为S的两个数字 描述&#xff1a; 输入一个递增排序的数组和一个数字S&#xff0c;在数组中查找两个数&#xff0c; 是的他们的和正好是S&#xff0c;如果有多对数字的和等于S&#xff0c;输出两个数的乘积最小的。 输出描述&#xff1a; 对应每个测…...

Spring Boot中的全局异常处理

Spring Boot中的全局异常处理 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中实现全局异常处理&#xff0c;这是保证应用…...

中英双语介绍美国苹果公司(Apple Inc.)

中文版 苹果公司简介 苹果公司&#xff08;Apple Inc.&#xff09;是一家美国跨国科技公司&#xff0c;总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一&#xff0c;苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…...

C语言牢大坠机

目录 开头程序程序的流程图《牢大坠机》结尾 开头 大家好&#xff0c;我叫这是我58&#xff0c;今天&#xff0c;我们要来看关于牢大坠机的一些东西。 程序 #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&#xff08;主分片&#xff09; Primary Shard&#xff08;主分片&#xff09;是索引数据存储的基本单位&#xff0c;承担着数据写入和查询的职责。以下是关于Primary Shard的一些关键点&#xff1a; 1. 数据分布&#xff1a;每个索引在创建时会被分成多个主分…...

React 中 useState 和 useReducer 的联系和区别

文章目录 使用场景使用 useState使用 useReducer 联系区别用法状态更新逻辑适用场景可读性和可维护性 使用场景 使用 useState 状态逻辑简单。只涉及少量的状态更新。需要快速和简单的状态管理。 使用 useReducer 状态逻辑复杂。涉及多个子状态或多种状态更新逻辑。需要更好…...

Linux 定时任务详解:全面掌握 cron 和 at 命令

Linux 定时任务详解&#xff1a;全面掌握 cron 和 at 命令 Linux 系统中定时任务的管理对于运维和开发人员来说都是至关重要的。通过定时任务&#xff0c;可以在特定时间自动执行脚本或命令&#xff0c;提高系统自动化程度。本文将详细介绍 Linux 中常用的定时任务管理工具 cr…...

力扣考研经典题 反转链表

核心思想 头插法&#xff1a; 不断的将cur指针所指向的节点放到头节点之前&#xff0c;然后头节点指向cur节点&#xff0c;因为最后返回的是head.next 。 解题思路 1.如果头节点是空的&#xff0c;或者是只有一个节点&#xff0c;只需要返回head节点即可。 if (head null …...

opencv 设置超时时间

经常爬视频数据&#xff0c;然后用opencv做成图片 因此设置超时时间很重要 cap.set(cv2.CAP_PROP_FPS, timeout_ms) for idx, row in data.iterrows(): if idx < 400: continue try: # 打开视频文件 timeout_ms 5000 cap cv2.VideoCapture(row[PLAY_URL]) cap.set(cv2.C…...

2024年7月6日随笔

期末考试全部结束了&#xff0c;这个月是真累啊&#xff0c;一堆事&#xff0c;好在都熬过来了&#xff0c;上次参加的那个码题杯自己居然进国赛了&#xff0c;我看了一下职业赛道和本科赛道的题&#xff0c;本科赛道的感觉要难上不少&#xff0c;比赛时间是一周后&#xff0c;…...

Ubuntu 打开或关闭界面

设置开机默认关闭图形界面 1. 设置系统默认启动到多用户目标&#xff08;命令行界面&#xff09;&#xff1a; o 使用以下命令将系统默认启动目标设置为多用户目标&#xff08;这会关闭图形界面&#xff09;&#xff1a; sudo systemctl set-default multi-use…...

使用京东云主机搭建幻兽帕鲁游戏联机服务器全流程,0基础教程

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云整理基于京…...

Python和MATLAB微机电健康推导算法和系统模拟优化设计

&#x1f3af;要点 &#x1f3af;惯性测量身体活动特征推导健康状态算法 | &#x1f3af;卷积网络算法学习惯性测量数据估计六自由度姿态 | &#x1f3af;全球导航卫星系统模拟&#xff0c;及惯性测量动态测斜仪算法、动态倾斜算法、融合算法 | &#x1f3af;微机电系统加速度…...

IT之家最新科技热点 | 小米 AI 研究院开创多模态通用模型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…...

黑色矩形块检测数据集VOC+YOLO格式2000张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2000 标注数量(xml文件个数)&#xff1a;2000 标注数量(txt文件个数)&#xff1a;2000 标注…...

Linux内存管理--系列文章柒——硬件架构

一、引子 之前文章讲解的是系统的虚拟内存&#xff0c;本章讲述这些硬件的架构和系统怎样统一管理这些硬件的。 二、物理内存模型 物理内存模型描述了计算机系统中的物理内存如何由操作系统组织和管理。它定义了物理内存如何划分为单元&#xff0c;如何寻址这些单元以及如何…...

QQ音乐Android一面凉经

最近面试了不少公司, 近期告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是QQ音乐Android一面凉经。 面试岗位: QQ音乐Android开发工程师面试时长: 50min(提问40min 反问10min)代码考核: 无 面试问题(40min) 自我介绍 工作经历, 重点…...

浅谈进程隐藏技术

前言 在之前几篇文章已经学习了解了几种钩取的方法 浅谈调试模式钩取浅谈热补丁浅谈内联钩取原理与实现导入地址表钩取技术 这篇文章就利用钩取方式完成进程隐藏的效果。 进程遍历方法 在实现进程隐藏时&#xff0c;首先需要明确遍历进程的方法。 CreateToolhelp32Snapsh…...

【C++】Google Test(gtest)单元测试

文章目录 Google Test&#xff08;gtest&#xff09;单元测试使用示例更多用法测试夹具 Google Test&#xff08;gtest&#xff09;单元测试 单元测试是一种软件测试方法&#xff0c;它旨在将应用程序的各个部分&#xff08;通常是方法或函数&#xff09;分离出来并独立测试&a…...

水箱高低水位浮球液位开关

水箱高低水位浮球液位开关概述 水箱高低水位浮球液位开关是一种用于监测和控制水箱中液位的自动化设备&#xff0c;它能够在水箱液位达到预设的高低限制时&#xff0c;输出开关信号&#xff0c;以控制水泵或电磁阀的开闭&#xff0c;从而维持水箱液位在一个安全的范围内。这类设…...

Autoware内容学习与初步探索(一)

0. 简介 之前作者主要是基于ROS2&#xff0c;CyberRT还有AutoSar等中间件完成搭建的。有一说一&#xff0c;这种从头开发当然有从头开发的好处&#xff0c;但是如果说绝大多数的公司还是基于现成的Apollo以及Autoware来完成的。这些现成的框架中也有很多非常好的方法。目前作者…...

【手写数据库内核组件】01 解析树的结构,不同类型的数据结构组多层的链表树,抽象类型统一引用格式

不同类型的链表 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 不同类型…...

Pandas 进阶 —— 数据转换、聚合与可视化

引言 在数据分析的旅程中&#xff0c;Pandas 库提供了从数据转换到聚合再到可视化的全面解决方案。上篇我们掌握了数据的导入和清洗&#xff0c;本篇我们将探索如何通过 Pandas 对数据进行更高级的处理&#xff0c;包括数据转换、聚合分析以及可视化展示。 数据转换 数据转换…...

华为OD机试 - 来自异国的客人(Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…...

期末上分站——计组(3)

复习题21-42 21、指令周期是指__C_。 A. CPU从主存取出一条指令的时间 B. CPU执行一条指令的时间 C. CPU从主存取出一条指令的时间加上执行这条指令的时间。 D. 时钟周期时间 22、微型机系统中外设通过适配器与主板的系统总线相连接&#xff0c;其功能是__D_。 A. 数据缓冲和…...

IDA*——AcWing 180. 排书

IDA* 定义 IDA*&#xff08;Iterative Deepening A*&#xff09;是一种结合了深度优先搜索&#xff08;DFS&#xff09;的递归深度限制特性和A搜索的启发式估价函数的搜索算法。它主要用于解决启发式搜索问题&#xff0c;尤其是当搜索空间很大或者搜索成本不确定时。 IDA* 是…...

【云计算】公有云、私有云、混合云、社区云、多云

公有云、私有云、混合云、社区云、多云 1.云计算的形态1.1 公有云1.2 私有云1.3 混合云1.4 社区云1.5 多云1.5.1 多云和混合云之间的关系1.5.2 多云的用途1.5.3 影子 IT 和多云1.5.4 优缺点 2.不同云形态的对比 1.云计算的形态 张三⾃⼰在家做饭吃&#xff0c;这是 私有云&…...

MySQL中的MVCC解析

MySQL中的MVCC解析 多版本并发控制是MySQL中实现高并发的一种关键技术。通过对数据进行多版本的管理&#xff0c;MVCC能够在保证数据一致性的同时&#xff0c;提高数据库的并发性能。本文将深入探讨MySQL中的MVCC机制&#xff0c;包括其原理、实现方式以及优势。 MVCC的原理 …...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日聚会(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…...

初识STM32:芯片基本信息

STM32简介 STM32是ST公司基于ARM公司的Cortex-M内核开发的32位微控制器。 ARM公司是全球领先的半导体知识产权&#xff08;IP&#xff09;提供商&#xff0c;全世界超过95%的智能手机和平板电脑都采用ARM架构。 ST公司于1987年由意大利的SGS微电子与法国的Thomson半导体合并…...

Zabbix 配置PING监控

Zabbix PING监控介绍 如果需要判断机房的网络或者主机是否正常&#xff0c;这就需要使用zabbix ping&#xff0c;Zabbix使用外部命令fping处理ICMP ping的请求&#xff0c;在基于ubuntu APT方式安装zabbix后默认已存在fping程序。另外zabinx_server配置文件参数FpingLocation默…...

异常解决(三)-- Wandb fails with ServiceStartProcessError

原文链接&#xff1a;https://github.com/wandb/wandb/issues/5765 我的环境配置&#xff1a; Python3.8.16 Wandb0.17.4 在使用Wandb记录实验数据时&#xff0c; 报以下错误&#xff1a; ServiceStartProcessError: The wandb service process exited with 1. Ensure that s…...

Qt调用Matlab(一)

目录 1 概述2 创建Qt工程2.1 增加Matlab支持3 调用Matlab3.1 widget.h3.2 widget.cpp4 运行4.1 配置4.2 运行1 概述 MATLAB是MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域…...

网络爬虫(二) 哔哩哔哩热榜高频词按照图片形状排列

我们有时候需要爬取结果生成为自定义的词云图 生成自定义的词云图通常需要以下步骤&#xff1a; 1. 爬取数据&#xff1a;使用爬虫工具或库&#xff0c;如requests、BeautifulSoup等&#xff0c;可以爬取网页、论坛、社交媒体等平台上的文本数据。 2. 数据预处理&#xff1a…...

MySQL 常见错误及解决方案

1. Too many connections 运行环境&#xff1a;Winows11、Phpstudy V8.1.1.3、MySQL 5.7.26 同一时间 MySQL 的连接数量有限制&#xff0c;当超过上限时将提示下面错误信息&#xff1a; 1040 - Too many connections 查看当前最大连接数 mysql> show variables like %max_…...

STM32 - 内存分区与OTA

最近搞MCU&#xff0c;发现它与SOC之间存在诸多差异&#xff0c;不能沿用SOC上一些技术理论。本文以STM L4为例&#xff0c;总结了一些STM32 小白入门指南。 标题MCU没有DDR&#xff1f; 是的。MCU并没有DDR&#xff0c;而是让代码存储在nor flash上&#xff0c;临时变量和栈…...

RAG理论:ES混合搜索BM25+kNN(cosine)以及归一化

接前一篇:RAG实践:ES混合搜索BM25+kNN(cosine) https://blog.csdn.net/Xin_101/article/details/140230948 本文主要讲解混合搜索相关理论以及计算推导过程, 包括BM25、kNN以及ES中使用混合搜索分数计算过程。 详细讲解: (1)ES中如何通过BM25计算关键词搜索分数; (2)…...

分享大厂对于缓存操作的封装

hello&#xff0c;伙伴们好久不见&#xff0c;我是shigen。发现有两周没有更新我的文章了。也是因为最近比较忙&#xff0c;基本是993了。 缓存大家再熟悉不过了&#xff0c;几乎是现在任何系统的标配&#xff0c;并引申出来很多的问题&#xff1a;缓存穿透、缓存击穿、缓存雪崩…...