用c实现进程监控,如果某一进程退出则重启

简介: 用c实现进程监控,如果某一进程退出则重启
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/types.h>  
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>



//要监控的程序
#define  P1   "hello1"
#define  P2   "hello2"
#define  P3   "hello3"
#define  PATH   "."

/*****************************/
int is_run(char *name);
void killall_hello(void);
/*****************************/


//运行返回1,没有运行返回0
int is_run(char *name)
{
int ret = -1;
char buf[256] = {'\0'};
snprintf(buf, sizeof(buf), "pidof %s >> /dev/null", name); 
ret = system(buf);
if(!WEXITSTATUS(ret)){ //#include <sys/wait.h>
//printf("%s is running!\n", name);
return 1;
}
else{
//printf("%s is not running!\n", name);  
return 0;
}
}
void killall_hello(void)
{  


char buf[128] = {'\0'};
snprintf(buf, sizeof(buf), "killall %s", P1);
system(buf);
snprintf(buf, sizeof(buf), "killall %s", P2);
system(buf);
snprintf(buf, sizeof(buf), "killall %s", P3);
system(buf);

}


int main(int argc, char **argv)
{
int p1_ret = -1;
int p2_ret = -1;
    int p3_ret = -1;
char buf[128];
bzero(buf, sizeof(buf));


while(1){

p1_ret = is_run(P1);
p2_ret = is_run(P2);
p3_ret = is_run(P3);

if (!(p1_ret && p2_ret && p3_ret))
{
killall_hello(); 
printf("rerun hello3\n");
snprintf(buf, sizeof(buf), "%s/%s &", PATH, P3);
system(buf);

//打印日志信息
system("date >> w.log");
if(!p1_ret){
snprintf(buf, sizeof(buf), "echo %s not run , killall , run %s >> w.log", P1, P3);
system(buf);
}
else if(!p2_ret){
snprintf(buf, sizeof(buf), "echo %s not run , killall , run %s >> w.log", P2, P3);
system(buf);
}
else if(!p3_ret){
snprintf(buf, sizeof(buf), "echo %s not run , killall , run %s >> w.log", P3, P3);
system(buf);
}
}
sleep(5);
}
exit(0);
}
目录
相关文章
|
4月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
|
10天前
|
监控
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
|
21天前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
31 1
|
5月前
|
缓存 监控 调度
第六十一章 使用 ^PERFSAMPLE 监控进程 - 分析维度
第六十一章 使用 ^PERFSAMPLE 监控进程 - 分析维度
37 0
|
2月前
|
数据采集 监控 API
如何监控一个程序的运行情况,然后视情况将进程杀死并重启
这篇文章介绍了如何使用Python的psutil和subprocess库监控程序运行情况,并在程序异常时自动重启,包括多进程通信和使用日志文件进行断点重续的方法。
|
2月前
|
Linux Perl
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
|
3月前
|
缓存 Linux 调度
【linux】进程控制——进程创建,进程退出,进程等待
【linux】进程控制——进程创建,进程退出,进程等待
|
5月前
|
运维 监控 Ubuntu
Python实现ubuntu系统进程内存监控
Python实现ubuntu系统进程内存监控
56 1
|
5月前
|
监控
第六十章 使用 ^PERFSAMPLE 监控进程 - 预定义分析示例
第六十章 使用 ^PERFSAMPLE 监控进程 - 预定义分析示例
29 0
|
5月前
|
监控 Go
第五十九章 使用 ^PERFSAMPLE 监控进程 - 收集样本
第五十九章 使用 ^PERFSAMPLE 监控进程 - 收集样本
30 0

相关实验场景

更多
下一篇
无影云桌面