上位机图像处理和嵌入式模块部署(树莓派4b和进程监控)

2024-05-11 08:36

本文主要是介绍上位机图像处理和嵌入式模块部署(树莓派4b和进程监控),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

  

        虽然软件开发的时候,我们总是希望软件不要发生bug、不要有闪退、甚至于说不要有内存泄漏,但这也只是我们自己的一厢情愿而已。只要前方有需求,软件功能在不停地迭代和优化,那么就势必会引入新的bug,这是不可避免的。因此,以防万一,我们一般会在软件开发的时候编写一个关联的监控进程,防止发生程序闪退的现象。

1、编写测试代码hello.c

        首先我们编写一个测试代码hello.c,内容如下所示

#include <stdio.h>
#include <unistd.h>int main()
{while(1){printf("hello, world\n");sleep(1);}return 0;
}

2、编译测试代码

        有了代码之后,我们简单用gcc工具编译一下,

gcc hello.c -g -o hello

3、准备监控进程run.py

        脚本的内容比较简单,首先它启动hello程序。等到启动之后,它就会定时检查一下程序还在不在,如果在,一切ok。如果不在的话,那么就需要重启一下进程。

import subprocess
import timedef start_program():process = subprocess.Popen(["/home/feixiaoxing/Desktop/monitor/hello"])return processdef monitor_program(process):while True:if process.poll() is not None:print("Program exited, restarting...")process = start_program()time.sleep(1)if __name__ == "__main__":program_process = start_program()monitor_program(program_process)

4、测试和验证

        有了可执行程序hello,有了监控程序run.py,接下来就可以开始测试了。测试过程中,原本闪退的部分,我们可以通过ps aux | grep hello找到pid之后、并且kill的方法来模拟闪退。观察闪退之后hello程序的打印是不是还正常。如果正常,代表我们的设计是有效果的;反之,则代表还需要check一下失败的原因是什么,回头重新改进一下。

feixiaoxing@raspberrypi:~/Desktop/monitor $ python3 run.py
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
Program exited, restarting...
hello, world
hello, world
hello, world
hello, world
hello, world

        通过打印,我们发现run.py启动之后,是一直有打印的。这个时候,我们通过另外一路ssh登录到树莓派上,找到hello并且kill -9 hello之后,这个时候run.py也发现hello不见了,所以重新启动了程序。这就是整个监控的基本原理。最后给出kill hello的方法,

feixiaoxing@raspberrypi:~/Desktop $ ps aux | grep hello
feixiao+    2197  0.0  0.0   2192  1024 pts/0    S+   23:32   0:00 /home/feixiaoxing/Desktop/monitor/hello
feixiao+    2199  0.0  0.0   6088  1920 pts/1    S+   23:32   0:00 grep --color=auto hello

这篇关于上位机图像处理和嵌入式模块部署(树莓派4b和进程监控)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979032

相关文章

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提