嵌入式系统程序运行状态检测和自启动

嵌入式系统程序运行状态检测和自启动

参考博文比较多,文中都有相应的链接。
一、问题描述
Shell脚本实例(一) 监控一个程序的运行情况
二、解决思路
<1>、我们判断一个程序是否运行,可以通过查看该程序的进程信息来判断。
例: 判断程序 01FirstScript.sh 是否在运行
命令:ps -ef | grep 01FirstScript.sh | grep -v grep
结果分析: 如果命令执行之后有输出,即输出进程信息。则说明程序正在运行,如果执行之后没有输出,则说明程序没有运行
<2>、如何监控指定的程序?
我们可以将指定程序的名字作为监控程序的参数传递进去,在内部实现时,通过死循环来不断监控
<3>、如果程序未运行,如何启动程序?
在判断程序为运行时,如果指定程序名是监控程序的第一个参数。可以通过下面命令启动指定程序
sh $1
三、脚本代码实现

四、程序执行过程说明
<1>、一开始指定程序并未运行
<2>、然后监控进程检测指定程序未运行,随即启动指定程序
<3>、指定程序开始运行
<4>、在中途使用kill命令终止指定程序进程
<5>、监控进程再次检测到指定程序未运行,随即启动指定程序
<6>、指定程序开始运行
【原文链接:】https://blog.csdn.net/SunXiWang/article/details/78637746
具体代码,可以参考原文链接。

1.ps命令——查看静态的进程统计信息(Processes Statistic)
常见的选项:
a:显示当前终端下的所有进程信息,包括其他用户的进程。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程。
-e:显示系统内的所有进程信息。
-l:使用长(long)格式显示进程信息。
-f:使用完整的(full)格式显示进程信息。
示例1:ps aux 将以简单列表的形式显示出进程信息。如下图

上图中的输出信息中,第1行为列表标题,其中各字段的含义描述如下:
USER:启动该进程的用户账号名称
PID:该进程的ID号,在当前系统中是唯一的
TTY:该进程在哪个终端上运行。“?”表未知或不需要终端
STAT:显示了进程当前的状态,如S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、+(前台进程)。对处于僵死状态的进程应予以手动终止。
START:启动该进程的时间
TIME:该进程占用CPU时间
COMMAND:启动该进程的命令的名称
%CPU:CPU占用的百分比
%MEM:内存占用的百分比
VSZ:占用虚拟内存(swap空间)的大小
RSS:占用常驻内存(物理内存)的大小
https://baijiahao.baidu.com/s?id=1617448120776344096

Shell脚本监控程序运行情况(重启程序)
https://blog.csdn.net/weixin_44100850/article/details/94588412?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
*1 shell脚本参考
https://blog.csdn.net/u013943234/article/details/51017804
*2
https://blog.csdn.net/yahohi/article/details/6114141?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3
** https://blog.csdn.net/baobingji/article/details/84556559?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

通过搜集的资料,进行简单的模拟复现。*

1 编写一个C语言循环程序
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main(int argc, char *args[])
5 {
6 // 定义循环变量
7 int i = 0;
8 // 开始循环
9 while(1)
10 {
11 // 输出系统的时间
12 system(“date”);
13 // 打印输出i的值
14 printf(“i = %d\n”, i);
15 // 休眠一秒
16 sleep(1);
17 i++;
18 }
19 return 0;
2 编译运行
gcc test.c -o zhx

./zhx

Ps aux查看

3 编写shell脚本进行检查和程序重启
Shell代码

1)如果正在工作,输出process already started!
2) 如果没有工作(1.没有启动 2.启动,但是程序崩了),提示process has been restarted!

Ctrl + c 中止程序
因为shell脚本也在运行,所以会间隔xs进行程序重新启动

以上简单模拟出程序崩溃后自动启动的过程。
需要讨论的问题:
1 shell程序是需要开机自启动?
2 假如shell启动后的程序也崩了,怎么解决?
3 出现问题后怎么反馈给用户,是否需要检测和维护等?
4 需不需要做一个日志进行状态搜集?
5 程序中止原因如何检测?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值