IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 自动驾驶 Apollo 源码分析系列,系统监控篇(四):Monitor模块如何监控进程 Process 的存活状态? -> 正文阅读

[人工智能]自动驾驶 Apollo 源码分析系列,系统监控篇(四):Monitor模块如何监控进程 Process 的存活状态?

本篇文章分析 Apollo 中监控模块中监控进程状态的相关代码。

1. ProcessMonitor

在这里插入图片描述
ProcessMonitor 是一个普通的定时器组件,内部函数也只是常规的 RunOnce 和 UpdateStatus,所以,可以推断出它的逻辑非常简单。

但要注意的是它引入的头文件有 hmi_mode 和 system_status 两个,这说明它要从中获取一些数据结构定义。

在这里插入图片描述
上面的代码说明,ProcessMonitor 中的 RunOnce 每隔 1.5s 被触发一次。

在这里插入图片描述

工作流程分为 4 个步骤:

  1. 获取正在运行的进程列表
  2. 检测 HMI 中配置的 Module 运行信息
  3. 检测受监控的模块运行信息
  4. 检测其他组件运行信息

2 获取可运行进程信息

这里通过读取 /proc/pid/cmdline 信息

linux 把进程相关的信息映射到虚拟文件系统 /proc 目录下。而/proc/pid/cmdline是一个只读文件,里面存储了相应的进程启动命令行参数。

在这里插入图片描述
由于在 cmdline 文件下的命令行信息分割符是 ‘\0’,所以,需要把它们替换成空格。

3. 检测 HMI 配置的 Module 运行信息

在这里插入图片描述
首先,要弄明白两个东西:hmi mode 和 hmi module。
这在前面提到过的头文件中有定义。

在这里插入图片描述
HMIMode 里面包含了 Modules,是对应的一个 map。
Module 里面通过 ProcessMonitorConfig 指示模块是否正在运行。

在这里插入图片描述
ProcessMonitorConfig 只是一个 string 类数组,里面存放了进程启动时的命令行参数。

做 HMI Module 检测时,需要传入模块名字和刚获取到的正在运行的进程列表信息,通过 UpdateStatus 函数进行处理。

在这里插入图片描述
代码很简单,拿 running_processes 中的文本和传入的模块名字匹配,匹配上了就是 OK 的状态结果,否则就是 FATAL 的结果。

4. 检测受监控的 Module 的运行状态

在这里插入图片描述
逻辑和 hmi module 的一样,只是对象是 monitor components。

在这里插入图片描述
仍然是通过 ProcessMonitorConfig 判断。

注释里面也有讲到,状态更新时会影响 SystemStatus.components[i].process_status的值。

在这里插入图片描述

一个 Component 的状态由 1 个概要状态和 5 个子状态组成。

process_status 是其中的 1 个子状态。

所以,现在回看代码,无非也是在 running_processess 列表中找 component 相应的 process_status 信息。

5. 检测其他的组件

在这里插入图片描述

这个逻辑没有什么差别。

6. 总结与思考

  1. 进程的运行状态只有 OK 和 FATAL 两种。
  2. 核心逻辑是通过程序读取 /proc/pid/cmdline 文件获取到了正在运行的进程名字,然后通过与 HMI 配置的模块名字或者是受监控的组件名字相匹配进行状态的判断。
  3. 我开始有思考一个问题,因为平常开发时查看进程信息都是通过在 console 进行 ps 命令,那与此相比,cmdline 有什么好处呢?后来,我仔细想了想,因为在代码中执行 ps 命令,需要产生额外的开销,而直接读取一个 proc 文件开销较小,由于进程监控是持续性的,所以,读取 cmdline 这个方式比较好。但这是我推测,没有验证,有经验的同学可以指教一下我。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:28:52  更:2022-02-28 15:34:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:33:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码