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

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

若依部署Nginx和Tomcat全过程

《若依部署Nginx和Tomcat全过程》文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署... 目录Nginx部署后端部署Tomcat部署出现问题:点击刷新404总结Nginx部署第一步:打包

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的