UncleZZ‘s Remedy I - App Daemon

1.缘起

这个系列会汇集一些临近deadline是最后补救措施,以备不时之需。面临项目交付时,经常会有一些或大或小的功能项点,甚至是bug无法做完。这个时候,就需要一些终极补救措施来应对这种不时之需。

第一个工具app_daemon是针对那些需要长周期运行,但是一些内存泄露或者别的资源释放问题迟迟无法解决的情形,它叫应用程序看护工具,实际运行效果是这样的:

[root@localhost app_daemon]# ./app_daemon ./test_app
real app runing....
real app quited
Application scheduling exited. Restarting in 5 seconds...
real app runing....
real app quited
Application scheduling exited. Restarting in 5 seconds...
real app runing....
real app quited
Application scheduling exited. Restarting in 5 seconds...

2.编码 

//usage: app_daemon <app_to_daemon's cmd_line> [param1 param2 param3...]
//build:gcc app_daemon.c -o app_daemon
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>void runWatchingAppAsSubApp(int argc, char *argv[]) {char new_cmd[2048] = {0};int i;int l;for(i=0; i<argc; ++i){l = strnlen(new_cmd, 2048);if(i==0){continue; //i==0 is itsself}else{snprintf(&new_cmd[l], sizeof(new_cmd)-l-1, "%s ", argv[i]);}// 替换为您的应用程序启动命令system(new_cmd);}
}int main(int argc, char *argv[]) {if(argc == 1){printf("Usage:%s <app_to_watch> [param1, param2...]\n", argv[0]);return 0;}while (1) {pid_t pid = fork();if (pid == 0) {// 子进程中运行应用程序runWatchingAppAsSubApp(argc, argv);exit(0);} else if (pid > 0) {// 等待应用程序退出int status;waitpid(pid, &status, 0);// 延时重启时间(单位:秒)int restart_delay = 5; // 5 秒printf("Application scheduling exited. Restarting in %d seconds...\n", restart_delay);sleep(restart_delay);} else {printf("Fork failed\n");return 1;}}return 0;
}

附录A 用于测试的一个桩应用

void main(void)
{printf("real app runing....\n");sleep(3);printf("real app quited\n");
}
~                  

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

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

相关文章

股票三种行情的最佳买卖点,分时图与K线图分析案例教学

一、教程描述 本套股票行情教程&#xff0c;大小5.40G&#xff0c;共有50个文件。 二、教程目录 股票教程01&#xff1a;上升行情之股票运行轨迹.mp4 股票教程02&#xff1a;上升行情之千金难买牛回头.mp4 股票教程03&#xff1a;上升行情之一线一量走天下.mp4 股票教程0…

Qt程序设计-钟表自定义控件实例

本文讲解Qt钟表自定义控件实例。 效果如下: 创建钟表类 #ifndef TIMEPIECE_H #define TIMEPIECE_H#include <QWidget> #include <QPropertyAnimation> #include <QDebug> #include <QPainter> #include <QtMath>#include <QTimer>#incl…

苹果上架App被拒绝的原因

苹果上架App被拒绝的原因有很多种&#xff0c;主要包括以下几个方面&#xff1a; 1.功能问题&#xff1a;苹果认为你的App存在功能问题&#xff0c;不符合App Store的要求。比如&#xff0c;你的App可能存在漏洞&#xff0c;会影响用户体验或者安全性&#xff0c;或者涉及到隐…

Android fragment 转场动画

fragment 动画 使用 setCustomAnimations 绘制转场动画使用共享元素的动画recyclerview in 参考地址 使用 setCustomAnimations 绘制转场动画 概述 在 Android 中&#xff0c;可以使用 setCustomAnimations() 方法来绘制自定义的 Fragment 转场动画。该方法接受四个参数&…

【leetcode每日一题】【滑动窗口长度固定】643.子数组最大平均数

643.子数组最大平均数 长度固定 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 示例 1&#xff1a; 输入&#xff1a;nums [1,12,-5,-6,50,3], k 4 输出&#xff1a;12.75 解释&…

libigl 网格等值线

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 网格的等值线(contour lines)是在二维或三维空间中表示等值集合的线条。在二维空间中,等值线通常用于表示具有相同数值的等高线(等值线图),而在三维空间中,等值线则用于表示具有相同数值的等值面(等值面图)…

汽车电子笔记:BootLoader升级过程疑难问题解决方式(Bootloader响应10 02 + 刷死拯救机制)

目录 1、概述 2、如何在BootLoader响应10 02 2.1、实现流程图 2.2、实现方式(代码思路) 3、刷死拯救机制(100%能救活,适配各类控制器

php伪协议 [SWPUCTF 2022 新生赛]ez_ez_php(revenge)

打开题目 题目源代码如下 <?php error_reporting(0); if (isset($_GET[file])) {if ( substr($_GET["file"], 0, 3) "php" ) {echo "Nice!!!";include($_GET["file"]);} else {echo "Hacker!!";} }else {highlight_fi…

深入探索MyBatis Dynamic SQL:发展、原理与应用

在数据驱动的现代应用中&#xff0c;与数据库的交互是不可或缺的环节。MyBatis以其简洁而强大的特性&#xff0c;在Java持久层框架中占据了重要地位。然而&#xff0c;随着业务复杂性的增加&#xff0c;动态生成SQL的需求日益凸显。为了满足这一需求&#xff0c;MyBatis Dynami…

排序方法总结

排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 排序方法总结 「冒泡排序 bubble sort」「选择排序 selection sort」「插入排序 insertion sort」「快速排序 quick sort」…

【非比较排序】计算排序算法

目录 CountSort计数排序 整体思想 图解分析 代码实现 时间复杂度&优缺分析 CountSort计数排序 计数排序是一种非比较排序&#xff0c;不需要像前面的排序一样去比较。 计数排序的特性总结&#xff1a; 1. 计数排序在数据范围集中时&#xff0c;效率很高&#xff0c;但…

[C++]使用C++实现监控文件是否被修改

软件开发过程中经常会用到配置文件,某些应用场景要求在软件运行时动态修改配置文件,此时就需要监控配置文件是否被修改,下面我们就来看看如何使用C实现这一功能吧 软件开发过程中经常会用到配置文件&#xff0c;某些应用场景要求在软件运行时动态修改配置文件&#xff0c;此时…

微信公众号关键词自动回复

今天主要给大家讲一下如何实现微信公众号关键词的自动回复功能&#xff0c;就如网站的文章而言&#xff0c;进行人机识别&#xff0c;需要关注公众号回复验证码获取到验证码从而展示文章内容&#xff0c;&#xff0c;具体效果如下图。 springboot 2.3.2RELEASE 1、微信公众平台…

什么是高可用架构

一、什么是高可用 在运维中&#xff0c;经常听到高可用&#xff0c;那么什么是高可用架构呢&#xff1f;通俗点讲&#xff0c;高可用就是在服务故障&#xff0c;节点宕机的情况下&#xff0c;业务能够保证不中断&#xff0c;服务正常运行。 举个例子&#xff0c;支付宝&#…

Java学习笔记------包和final

包 包就是文件夹。用来管理各种不同功能的Java类&#xff0c;方便后期代码维护 包名的规则&#xff1a;公司域名反写包的作用&#xff0c;需要全部英文小写&#xff0c;见名知意 例如&#xff1a; package com.jxust.domain public class Student{私有化成员变量构造方法成…

naive-ui-admin BasicTable 列表操作栏显示图标icon

效果图 在使用BasicTable的页面添加引用&#xff0c;这里随便弄了个icon import { GameController } from "vicons/ionicons5" 自定义列 const actionColumn reactive({width: 180,title: "操作",key: "action",fixed: "right",ren…

顺丰科技2024届春季校园招聘常见问题解答及SHL测评题库

顺丰科技2024届春季校园招聘常见问题解答及SHL测评题库 Q&#xff1a;顺丰科技2024届校园招聘面向对象是&#xff1f; A&#xff1a;2024届应届毕业生&#xff0c;毕业时间段为2023年10月1日至2024年9月30日&#xff08;不满足以上毕业时间的同学可以关注顺丰科技社会招聘或…

全面介绍HTML的语法!轻松写出网页

文章目录 heading(标题)paragraph(段落)link(超链接)imagemap(映射)table(表格)list(列表)layout(分块)form(表单)更多输入:datalistautocompleteautofocusmultiplenovalidatepatternplaceholderrequired head(首部)titlebaselinkstylemetascriptnoscript iframe HTML&#xff…

备战蓝桥杯---树形DP基础1

我们先来看几个比较简单的例子来引入&#xff1a; 我们令f[i]表示以i为根节点的子树大小&#xff0c;易得状态转移方程为&#xff1a; f[i]1f[son1]....f[soni]; 我们用DFS即可&#xff0c;下面是大致的模板&#xff1a; 让我们来看看几道题吧&#xff1a; 1.贪心树形DPDFS&…

MapGIS农业信息化解决方案(1)

当前,信息化发展水平已经成为衡量一个国家和地区现代化水平和综合实力的重要标志。推进农业信息化,成为正在经历由传统向现代转型的中国农业必须跨越的门槛。连续多年,中央 1 号文件均提出“农业信息化建设”的目标,提出“整合资源,共建平台,健全农村信息服务体系”;在《…