Linux —— 管理进程

一、查看进程

  1. 运行态(Running)
    • 定义:处于运行态的进程正在 CPU 上执行指令。在单 CPU 系统中,同一时刻只有一个进程处于运行态;在多 CPU 或多核系统中,可能有多个进程同时处于运行态。
    • 示例
      • 当你在计算机上运行一个计算密集型程序,如科学计算软件在进行复杂的数学运算时,该程序对应的进程在 CPU 上执行运算指令,此时这个进程就处于运行态。
  2. 就绪态(Ready)
    • 定义:就绪态的进程已经准备好运行,即它们已经获得了除 CPU 资源之外的所有运行所需资源,但正在等待 CPU 分配时间片来执行。
    • 示例
      • 在一个多任务操作系统中,有多个应用程序同时打开。当你在前台运行一个程序(如文本编辑器)时,其他后台程序(如音乐播放器)对应的进程如果没有被阻塞,就处于就绪态,等待 CPU 调度。
  3. 阻塞态(Blocked)
    • 定义:阻塞态的进程由于等待某些事件的发生(如等待 I/O 操作完成、等待获取某个锁等)而暂时无法继续执行,此时即使 CPU 空闲也不能被调度运行。
    • 示例
      • 当一个进程发起了从硬盘读取数据的操作(如打开一个大型文件),在数据从硬盘加载到内存的过程中,这个进程就处于阻塞态,因为它必须等待 I/O 操作完成才能继续执行后续的指令。
      • 一个网络应用程序在等待网络数据接收时,例如等待服务器的响应,也会处于阻塞态。

(一)ps 选项 参数

        ps是 “process status”(进程状态)的缩写。它是一个用于查看当前系统中正在运行进程信息的实用程序。通过ps命令,用户可以获取有关进程的各种详细信息,如进程 ID(PID)、父进程 ID(PPID)、CPU 使用率、内存使用率、运行状态、启动时间等。—— 但是是静态的,相当于快照

选项

  • -a:显示所有终端上的所有进程,包括其他用户的进程。
  • -x:显示没有控制终端的进程。
  • -u:以用户友好的格式显示进程信息。
  • -f:全格式显示,包括父进程ID、进程状态、CPU使用率等更多列。
  • -e:显示系统中所有的进程。
  • -f:全格式显示。
  • -l:长格式显示,包括更多的信息如进程命令行、会话ID等。
  • -u:按用户显示,可以指定用户名。
  • -p:按进程ID显示,可以指定PID。
  • -o:自定义输出格式,可以指定要显示的列和排序方式。

PID:进程 ID,是每个进程在系统中的唯一标识符。

USER:进程所属的用户。

PR:进程优先级,数值越小优先级越高。

NI:进程的 Nice 值,用于调整进程优先级,范围是 - 20 到 19,负数表示更高的优先级。

VIRT:进程使用的虚拟内存大小,包括进程代码、数据、共享库以及被交换到磁盘的内存页面等所有占用的内存空间。

RES:进程正在使用的物理内存大小(驻留集大小),不包括交换到磁盘的内存部分。

SHR:进程使用的共享内存大小,这部分内存可以被多个进程共享。

S:进程状态,和ps命令中的状态表示类似,如R(运行)、S(睡眠)、D(不可中断睡眠)等。

%CPU:CPU 使用率,即进程占用 CPU 时间的百分比。

%MEM:内存使用率,即进程占用物理内存的百分比。

TIME +:进程自启动以来使用 CPU 的总时间。

COMMAND:进程对应的命令名称。

(二)top 选项 参数

  top是一个非常重要的性能监测和进程查看工具。它能够实时显示系统中各个进程的资源占用情况以及系统的整体性能状态。top这个名字可以理解为 “top processes”(顶级进程),因为它主要用于展示占用资源最多的进程相关信息。—— 动态显示

选项

  • 基本选项

    • -d <秒数>:指定屏幕信息刷新的时间间隔。默认情况下,top每3秒刷新一次显示的数据。用户可以通过这个选项来调整刷新频率,以适应不同的监控需求。
    • -p <进程ID>:只监视特定PID的进程。这个选项允许用户专注于一个或多个特定的进程,而不是查看所有进程的信息。
    • -u <用户名>:仅显示指定用户的进程。当系统中有大量用户时,使用这个选项可以快速定位属于某个用户的进程。
    • -b:批处理模式输出,适合脚本或重定向到文件。这使得top的输出可以被保存到文件中或者进一步处理,而无需用户交互。
  • 高级选项

    • -n <次数>:指定top命令运行的次数后自动退出。例如,top -n 5将会更新五次后自动退出。
    • -H:在进程信息中显示线程详细信息。这对于需要分析多线程应用程序的性能非常有用。
    • -i:不显示闲置(idle)或无用的进程。这个选项可以帮助用户忽略那些不影响系统性能的进程。
    • -c:显示完整的命令行而不截断。默认情况下,top可能会截断显示过长的命令行,使用这个选项可以避免这种情况。
  • 交互式操作

    • h 或 ?:显示帮助页面。用户可以在运行时通过按键触发这些命令来获取更多的帮助信息。
    • k:终止一个进程(需要输入PID)。这个命令允许用户在不离开top界面的情况下终止不需要的进程。
    • r:更改一个进程的优先级(需要输入PID和新的nice值)。通过这个命令,用户可以动态地调整进程的优先级,以优化系统性能。
    • q:退出top。这是退出top的标准方式。

下面两张图对比,可以发现数据发送了变化

(三)pstree 选项

   pstree是一个用于以树状结构展示进程间关系的工具。它能够清晰地呈现出各个进程之间的父子关系,帮助用户直观地理解系统中进程的层次结构。

选项

  1. -a:显示每个程序的完整指令,包含路径、参数或是常驻服务的标示。
  2. -c:不使用精简标示法,强制展开相同的子树。
  3. -G:使用VT100终端机的列绘图字符。
  4. -h:列出树状图时,特别标明现在执行的程序。
  5. -H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序。
  6. -l:采用长列格式显示树状图。
  7. -n:用程序识别码排序。预设是以程序名称来排序。
  8. -p:显示程序识别码。
  9. -u:显示用户名称。
  10. -U:使用UTF-8列绘图字符。
  11. -V:显示版本信息。

(四)pgrep 选项 参数

   pgrep是一个用于根据进程名称或其他属性来查找进程 ID(PID)的工具。它可以帮助用户快速定位符合特定条件的进程,在进程管理和监控等场景中非常有用。

选项

  1. -a:列出PID和完整的命令行。
  2. -c:计算匹配的进程数量,而不是正常输出。
  3. -d:指定输出分隔符。
  4. -f:使用完整进程名来匹配。
  5. -g:匹配列出的进程组ID。
  6. -G:匹配真实组ID。
  7. -h:列出树状图时,特别标明现在执行的程序。
  8. -l:显示PID和进程名称。
  9. -n:仅显示找到的最大(结束)进程号。
  10. -o:仅显示找到的最小(起始)进程号。
  11. -P:只匹配给定父进程的子进程。
  12. -s:匹配会话ID。
  13. -t:匹配控制终端。
  14. -u:匹配有效用户ID。
  15. -U:匹配真实用户ID。
  16. -v:反向匹配。
  17. -w:列出所有线程ID。
  18. -x:与命令名完全匹配。
  19. -F:从文件中读取PID。
  20. -L:如果PID文件未锁定则失败。
  21. --ns:匹配属于同一命名空间的进程。
  22. --nslist:列出哪些命名空间将被视为--ns选项。
  23. -V:输出版本信息。
  24. -help:显示帮助信息并退出。

案例:查找与sshd服务相关的进程

显示有五个PID

PID 是 “Process Identification Number”(进程标识号)的缩写。在 Linux 和其他操作系统中,它是一个独一无二的数字标识符,用于区分系统中正在运行的各个进程。就像每个人都有一个独一无二的身份证号码一样,每个进程也有一个唯一的 PID 来标识自己。

二、终止进程

(一)kill 选项 参数

        kill的选项选项一般是信号,参数为PID

1、查看信号

常见信号类型及含义

  • SIGTERM(15)
    • 这是kill命令默认发送的信号。它是一种比较温和的终止信号,用于请求进程正常终止。大多数进程在收到SIGTERM信号后,会先进行一些清理工作,如释放资源、保存数据等,然后再终止。例如,当你使用kill <PID>(没有指定信号编号)命令时,实际上就是向进程发送SIGTERM信号,希望进程能够优雅地结束。
  • SIGKILL(9)
    • 这是一个强制终止信号。与SIGTERM不同,进程收到SIGKILL信号后会立即终止,不会进行任何清理工作。它通常用于当进程无法响应SIGTERM信号,或者需要立即终止一个可能处于死锁或失控状态的进程。不过,由于这种方式是强制终止,可能会导致数据丢失或系统资源未正确释放等问题。例如,kill -9 <PID>命令会发送SIGKILL信号来强行终止指定的进程。
  • SIGSTOP(19)和SIGCONT(18)
    • SIGSTOP信号用于暂停一个进程的执行,进程在收到这个信号后会停止运行,并且不会自动恢复,直到收到SIGCONT信号。这两个信号通常用于进程调试或者作业控制。例如,在调试一个多进程程序时,可以使用kill -19 <PID>暂停某个进程,然后进行检查,检查完毕后使用kill -18 <PID>恢复进程的执行。
  • SIGINT(2)
    • 这个信号通常在用户通过键盘输入Ctrl + C组合键时发送。它用于中断一个正在运行的前台进程,进程收到SIGINT信号后可以选择终止或者忽略该信号并继续运行。在很多命令行工具中,收到SIGINT信号后会停止当前操作并返回提示符状态。例如,当你在运行一个长时间的脚本,按Ctrl + C就会向脚本进程发送SIGINT信号。

2、终止进程

案例:终止PID为2443的进程

因为我使用远程工具,而2443就是它的进程,终止后远程终止了

重新连接后PID会重新定义

(二)killall 选项 参数

       使用kill我们会发现一个问题,就是kill只能一次终止一个进程,如果一个软件占大进程很多,我们需要多次操作。但killall可以终止全部进程。

killall的选项选项一般也是信号,参数为服务名称

案例:启动Nginx服务,查看,再关闭

要在root用户下操作

1、切换到软件的所在目录

2、启动服务,但是发现80端口被占用了

3、发现被httpd使用了

4、找到nginx.con的文件

4、把80端口修改为8080,保存退出

5、启动、查看服务,可以正常启动了

6、关闭进程,可以看到关闭后查不到如何进程了

三、前台任务与后台任务

前台任务

  • 定义:在 Linux 系统中,前台任务是指在当前终端会话中正在交互执行的任务。当一个程序在前台运行时,它会占据当前终端的输入和输出,直到该任务完成或被暂停、终止。—— 需要和用户交互,优先级高

想象你在舞台上表演节目,这个舞台就是你的终端。当你在舞台上表演(执行任务)时,台下的观众(你自己)都只能看着你表演,不能做别的事情,这就是前台任务。

比如你在终端打开一个文本编辑器来编辑文件,在你关闭这个文本编辑器之前,你不能在这个终端做其他操作了,这个文本编辑器的操作就是前台任务。

后台任务

  • 定义:后台任务是指在系统中运行,但不占据当前终端的输入和输出的任务。后台任务允许用户在启动任务后继续在终端进行其他操作。

还是用舞台来比喻,后台任务就像是在舞台后面有一群人在帮忙准备道具、布置场景。他们在工作的时候,舞台上的表演(你的终端操作)不受影响,你还可以继续在舞台上做其他事情。

例如,你让电脑在后台下载一个很大的文件。你在终端发出下载命令后,不用一直盯着下载进度,你可以在这个终端继续输入其他命令,做其他工作,下载这个操作就是后台任务。

(一)jobs 选项 参数

   jobs命令用于查看当前终端会话中正在运行的后台作业(任务)。当你将一个程序放到后台运行时,jobs命令可以帮助你了解这些后台任务的状态。

选项

  1. -l:列出作业的状态(运行、停止等)以及作业的命令行。这是默认行为,通常不需要显式指定。

  2. -p:只显示作业的进程ID(PID),不包括作业号或命令行。

  3. -r:只显示正在运行的作业。如果作业已停止,则不会显示。

  4. -s:只显示已停止的作业。如果作业正在运行,则不会显示。

案例:没有任何任务

案例:后台执行top命令

(二)bg 参数

bg命令用于将已停止的后台作业恢复到后台继续运行。

将前台任务调到后台

在后台执行top命令

(三)fg命令

将后台任务调到前台任务

进入hello后随便写点内容,然后ctrl+z快捷键停止任务

调到后台

调到前台,直接进行文件

四、服务管理

        服务进程又称守护进程

CentOS 7版本之前使用service、chkconfig命令,但是CentOS 9使用systemctl代替了service、chkconfig。

(一)systemctl 功能命令 服务进程

功能命令

  • 启动服务
    • 命令systemctl start <service - name>
    • 功能:用于启动指定的服务。例如,要启动httpd服务(假设系统中安装了httpd),可以使用systemctl start httpd。这会使httpd服务开始运行,开始监听相应的端口并处理请求(如果是网络服务的话)。
  • 停止服务
    • 命令systemctl stop <service - name>
    • 功能:用于停止正在运行的服务。例如,systemctl stop httpd会停止httpd服务,使其不再处理新的请求,关闭相关的监听端口。
  • 重启服务
    • 命令systemctl restart <service - name>
    • 功能:用于重启指定的服务。这相当于先执行stop命令再执行start命令。例如,systemctl restart httpd会先停止httpd服务,然后再重新启动它,这在对服务的配置文件进行修改后需要重新加载配置时很有用。
  • 查看服务状态
    • 命令systemctl status <service - name>
    • 功能:用于查看指定服务的当前状态。例如,systemctl status httpd会显示httpd服务是否正在运行、最近的启动或停止时间、是否有错误等信息。输出内容包括服务的活跃状态(activeinactive)、进程 ID(如果正在运行)、日志信息等。
  • 使服务开机自启
    • 命令systemctl enable <service - name>
    • 功能:用于设置指定的服务在系统开机时自动启动。例如,systemctl enable httpd会将httpd服务配置为开机自启,这样在系统下次重新启动时,httpd会自动开始运行。
  • 取消服务开机自启
    • 命令systemctl disable <service - name>
    • 功能:用于取消指定服务的开机自启设置。例如,systemctl disable httpd会将httpd服务从开机自启列表中移除,系统下次重启时不会自动启动httpd
  • 查看所有服务列表
    • 命令systemctl list - units --type=service
    • 功能:用于列出系统中所有的服务。这个命令会显示服务的名称、状态(loadedactive等)、描述等信息,帮助用户全面了解系统中安装和运行的服务情况。
  • 重新加载服务配置
    • 命令systemctl reload <service - name>
    • 功能:用于重新加载指定服务的配置文件。这与restart不同,reload通常不会中断服务的运行,只是重新读取配置文件使其生效。例如,对于一些配置文件修改频繁的服务(如nginx等),使用systemctl reload nginx可以在不中断服务的情况下使新配置生效。
  • 查看服务是否开机自启
    • 命令systemctl is - enabled <service - name>
    • 功能:用于检查指定服务是否设置为开机自启。如果是,会返回enabled;如果不是,返回disabled。例如,systemctl is - enabled httpd可以判断httpd服务是否会在开机时自动启动。

案例:以http为例子,使用systemctl的用法

1、安装http服务,该服务的守护进程为httpd

2、查看http服务运行状态——关闭状态

3、开启http服务

4、终止http服务

5、设置http服务开机自启动

五、计划任务

(一)at 选项 参数

选项

        -l:查看计划任务。

        -f:从文件中读取任务

        -d:删除计划任务,参数为任务编号。

1、案例:制定计划任务,18:00重启http服务

输入完systemctl restart httpd 回车2次即可

查看计划

(二)crontab 选项 参数

选项

        -e:编辑crontab文件

        -l:查看当前的计划任务

        -r:删除计划任务

        -u:编辑其他用户的计划任务,通常root使用该选项

* * * * * command_to_execute
- - - - -
| | | | |
| | | | +---- 星期几 (0 - 7) (星期天=0或7)
| | | +------ 月份 (1 - 12)
| | +-------- 一个月中的第几天 (1 - 31)
| +---------- 小时 (0 - 23)
+------------ 分钟 (0 - 59)

案例:每周末凌晨3点进入系统维护状态,30分钟后重启系统

1、编辑cronjob文件,把定时任务写入

2、加载命令,确认执行

3、查看计划

这个定时任务的含义如下:

  • 时间设置
    • 分钟0,表示在 0 分钟时。
    • 小时3,表示在 3 点。
    • 日期*,表示任意日期。
    • 月份*,表示任意月份。
    • 星期几6,表示星期六。
  • 执行的命令/usr/sbin/shutdown -r -t 1800
    • 这是一个系统关机命令。-r选项表示重启系统,-t 1800表示在执行关机操作前等待 1800 秒(30 分钟)。

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

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

相关文章

前端(组件传参案例)

父组件(商品详情页) 子组件上边放大图 底下缩小轮播图 需求分析&#xff1a;父组件获取图片数据&#xff0c;传给底下子组件进行进行轮播&#xff0c;实现父组件给子组件传参。然后底下子组件轮播后&#xff0c;把当前图片下标给父组件&#xff0c;实现子组件给父组件传参。父组…

What‘s Next on TON 成都站|聚焦生态创新,共享技术前沿

2024 年&#xff0c;TON 生态为何持续吸引全球开发者和用户的关注&#xff1f;在经历了一系列重要的技术更新和生态扩展后&#xff0c;TON 正在迎来一个爆发式增长的阶段。作为全球四城巡回沙龙的第三站&#xff0c;成都站的活动将如何继续推动这一势头&#xff0c;带来哪些不容…

算法-动态数组-62.不同路径

一、题目 二、思路解析 1.思路&#xff1a; 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.处理边界&#xff1a; a.只向右移动&#xff0c;至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …

近端策略优化(Proximal Policy Optimization, PPO)详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Windows 系统如何高效搭建 Linux 开发环境,一步步解锁内核源码

每日禅语 人闲桂花落&#xff0c;夜静春山空。月出惊山鸟&#xff0c;时鸣春涧中。人人皆以为王维只是在写自然界景物的美丽&#xff0c;其实这首诗不只体现了自然界的美丽&#xff0c;更是诗人内心的写照&#xff0c;体现了诗人心中禅心与禅境的完美结合。这首诗的境界之所以如…

C++循环斐波那契数列

1.斐波那契数列&#xff0c;又称黄金分割数列、因数学家莱昂纳多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”。如果每对兔子&#xff08;一雄一雌&#xff09;每月能生殖一对小兔子&#xff08;一雄一雌&…

“视觉革命:走进可视化AI识别系统的智能世界

嘿&#xff0c;各位朋友&#xff01;今天咱们来聊聊一个特别酷炫的技术——可视化AI识别系统。想象一下&#xff0c;如果你的手机能够像你一样“看”懂周围的世界&#xff0c;并且还能告诉你它看到了什么&#xff0c;是不是很神奇&#xff1f;没错&#xff0c;这就是可视化AI识…

Kubernetes 生态揭秘:深度剖析服务与流量管理、Pod 创建,以及外部请求的响应之旅

kubernetes&#xff0c;简称为k8s&#xff08;k12345678s&#xff09;。用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的集群&#xf…

职场上,如何做好自我保护?

今天我们讨论一个话题&#xff1a;在职场上&#xff0c;如何保护好自己&#xff1f;废话不多说&#xff0c;我们直接上干货。 &#xff08;一&#xff09; 1.时刻准备一点零食或代餐&#xff0c;如果遇到长时间的会议&#xff0c;就补充点能量。代餐最好选流体&#xff0c;这…

【Lua热更新】下篇 -- 更新中

上篇链接&#xff1a;【Lua热更新】上篇 文章目录 三、xLua热更新&#x1f4d6;1.概述&#x1f4da;︎2.导入xLua框架&#x1f516;3. C#调用Lua3.1Lua解析器3.2Lua文件夹的重定向3.3Lua解析器管理器3.4全局变量获取3.5全局函数获取3.6映射到List和Dictionary3.7映射到类3.8映…

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题&#xff0c;需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令&#xff0c;用于维护 go.mod 文件…

C# 中的闭包

文章目录 前言一、闭包的基本概念二、匿名函数中的闭包1、定义和使用匿名函数2、匿名函数捕获外部变量3、闭包的生命周期 三、Lambda 表达式中的闭包1、定义和使用 Lambda 表达式2、Lambda 表达式捕获外部变量3、闭包的作用域 四、闭包的应用场景1、事件处理2、异步编程3、迭代…

视阅口译与其他口译的不同点

与其他口译不同 译员在进行视阅口译时可以看到书面材料&#xff0c;这与交替口译和同声口译有所不同。译员能够提前浏览文本内容&#xff0c;对主题、结构和专业词汇等有初步的了解。 压力相对较小 视阅口译相较于同声传译而言&#xff0c;时间压力没有那么紧迫。译员有一定…

初学stm32 --- NVIC中断

目录 STM32 NVIC 中断优先级管理 NVIC_Type: ISER[8]&#xff1a; ICER[8]&#xff1a; ISPR[8]&#xff1a; ICPR[8]&#xff1a; IABR[8]&#xff1a; IP[240]&#xff1a; STM32 的中断分组&#xff1a; 中断优先级分组函数 NVIC_PriorityGroupConfig 中断初始化函…

Dot Foods EDI 需求分析及对接流程

Dot Foods 是一家美国领先的食品和非食品产品的中间批发分销商&#xff0c;主要为食品服务、零售和分销行业的客户提供服务&#xff0c;是北美大型食品中间分销商之一。Dot Foods &#xff08;以下简称 Dot&#xff09;的业务模式是通过整合多个供应商的产品&#xff0c;为客户…

MyBatis-Plus(一)

一、 MyBatis-Plus简介 1、简介 MyBatis-Plus &#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为 简化开发、提高效率而生。Mybatis-Plus提供了通用的Mapper和Service&#xff0c;可以在不编写任何SQ…

跟着AI 学AI开发二,本地部署自己的Chat GPT

这里要安装的是Open Web UI &#xff0c;用一张架构图说明AI 前端与后端的关系。 之前的Python 的方法已经做过多次介绍&#xff0c;这里不做赘述。 顺序&#xff1a;1&#xff0c;Ollama。 2&#xff0c;Docker。 3&#xff0c;Open WebUI。 Ollama 安装下载地址&#xff1…

204页PPT金税四期监管要求与最新政策及风险防范-培训课件

这份资料是关于金税四期监管要求、最新政策及风险防范的培训课件&#xff0c;包含204页PPT内容。核心内容涉及金税四期的发展历程、与金税三期的主要变化、指挥决策系统、税务风险预警指标、重点监控行为、税务稽查重点领域、避税方法及处罚、以及企业自查和税务风险管控原理。…

线性规划中的几种逻辑表达式

线性规划中的几种逻辑表达式 注意&#xff1a; 摘录字刘博士的《数学建模与数学规划》&#xff0c; 以便用时可查。 实际上Gurobi API 中自身放啊变的逻辑表达式函数&#xff0c;下面列出自定义的实现方式。 1 逻辑与 如果 x 1 1 x_1 1 x1​1, x 2 1 x_2 1 x2​1, 那…

knife4j增强swagger

背景 swagger很好用&#xff0c;但是UI不够友好 导入maven依赖 使用maven-search在common模块中导入依赖 <!-- knife4j --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId&g…