上位机图像处理和嵌入式模块部署(树莓派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

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

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

相关文章

一文了解spring的aop知识

推荐工具 objectlog 对于重要的一些数据&#xff0c;我们需要记录一条记录的所有版本变化过程&#xff0c;做到持续追踪&#xff0c;为后续问题追踪提供思路。objectlog工具是一个记录单个对象属性变化的日志工具,工具采用spring切面和mybatis拦截器相关技术编写了api依赖包&a…

【Ubuntu永久授权串口设备读取权限‘/dev/ttyUSB0‘】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限&#xff0c;拥有者是root&#xff0c;所属用户组为dialout2.2 查看dialout用户组成员&#xff0c;如图所示&#xff0c;普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

Java线程池:当核心线程数为 0 时,任务来了的执行流程

先说结论&#xff1a;创建一个临时线程直接执行 ThreadPoolExecutor.excute() public void execute(Runnable command) {if (command null)throw new NullPointerException();int c ctl.get();if (workerCountOf(c) < corePoolSize) {if (addWorker(command, true)) retu…

数据结构--顺序表和链表的区别

顺序表和链表之间各有优劣&#xff0c;我们不能以偏概全&#xff0c;所以我们在使用时要关注任务的注重点&#xff0c;以此来确定我们要使用两者中的哪一个。 不同点&#xff1a; 存储空间上&#xff1a; 顺序表在物理结构上是一定连续的&#xff0c;而链表(这里以带头双向循环…

如何向Linux内核提交开源补丁?

2021年&#xff0c;我曾经在openEuler社区上看到一项改进Linux内核工具的需求&#xff0c;因此参与过Linux内核社区的开源贡献。贡献开源社区的流程都可以在内核社区文档中找到&#xff0c;但是&#xff0c;单独学习需要一个较长的过程&#xff0c;新手难以入门&#xff0c;因此…

我觉得POC应该贴近实际

今天我看到一位老师给我一份测试数据。 这是三个国产数据库。算是分布式的。其中有两个和我比较熟悉&#xff0c;但是这个数据看上去并不好。看上去第一个黄色的数据库数据是这里最好的了。但是即使如此&#xff0c;我相信大部分做数据库的人都知道。MySQL和PostgreSQL平时拿出…

求一个B站屏蔽竖屏视频的脚本

求一个B站屏蔽竖屏视频的脚本 现在B站竖屏竖屏越来越多了&#xff0c;手机还好点给我一个按钮&#xff0c;选择不喜欢&#xff0c;但是我一般都用网页版看视屏&#xff0c;网页版不给我选择不喜欢的按钮&#xff0c;目测大概1/4到1/3的视频都是竖屏视频。 目前网页版唯一的进…

无人播剧直播收益在哪里!快手无人播剧新秘籍:版权无忧,日入四位数攻略

无人播剧顾名思义就是通过短视频平台直播不需要真人出镜受众群体通过网络短视频平台看到的经典影视剧集可以实现24小时不停断的播放利用多种途径变现的一种直播形式 1、操作简单、不露脸、不出镜2、手机、电脑都可以操作3、可以矩阵操作4、0粉丝、0作品、0保证金就可以开播5、…

YOLOv9独家原创改进: 特征融合创新 | 一种基于内容引导注意力(CGA)的混合融合 | IEEE TIP 2024 浙大

💡💡💡创新点:提出了一种基于内容引导注意力(CGA)的混合融合方案,将编码器部分的低级特征与相应的高级特征有效融合。 💡💡💡在多个数据集实现暴力涨点,适用于小目标,低对比度场景 💡💡💡如何跟YOLOv9结合:将backbone和neck的特征融合,改进结构图如下…

四川医疗废水处理一体化设备如何选型

医疗废水处理一体化设备的选型是一个综合考量的过程&#xff0c;需要根据医疗废水的特性、处理要求、场地条件、预算等因素来确定。以下是选型时需要考虑的关键点&#xff1a; 废水特性分析&#xff1a;医疗废水通常含有病原体、药物残留、重金属、有机物、放射性物质等污染物。…

【动态规划】子数组、子串系列II|等差数列划分|最长湍流子数组|单词拆分|环绕字符串中唯一的子字符串

一、等差数列划分 413. 等差数列划分 算法原理 &#x1f4a1;细节&#xff1a; 1.如果当前nums数组中i位置的数和前面两个数可以构成等差数列&#xff0c;那么当前位置所有子数组构成的等差数列个数dp[i]就等于前一个位置有子数组构成的等差数列个数1&#xff08;这个1代表增加…

Maven 插件使用

1.spring-boot-maven-plugin 我们直接使用 maven package &#xff08;maven自带的package打包功能&#xff09;&#xff0c;打包Jar包的时候&#xff0c;不会将该项目所依赖的Jar包一起打进去&#xff0c;在使用java -jar命令启动项目时会报错&#xff0c;项目无法正常启动。…