linux c进程监控

it2022-05-05  208

转载,原文地址:https://blog.csdn.net/MINGTING1323/article/details/81906216

我们经常需要实现进程监控,如果某一进程异常退出或是跑飞则立即重启。通常使用的有2种方法: 一.supervisor来管理进程。 二.自己写程序来监管。 对于1而言,有些文件系统中不支持,需要移植安装。 对于2而言,不少都是单独写个监管程序,通过写入文件PID定时检查进程PID是否存在,或是查看是否有此进程名存在。个人觉得不太实用,遇到调试时或是其他操作时,灵活性太差。 本案是模仿supervisor,使用注册监控程序,来实现管控。功能予以实现如下:

1,每个进程往往有如下三个状态。

typedef enum _cmdType { cmdRegister, /*注册*/ cmdCancel, /*注销*/ cmdSuspend /*暂停*/ }cmdType_t;

2.进程管控结构体

typedef struct msgStruct{ cmdType_t cmdType; //命令类型 pid_t pid; //进程PID char executablePath[MAX_PATH_LEN]; //进程执行路径 int argc; //参数个数 argStr argv[MAX_PARAM]; //参数 }msgStruct;

3.所进程带参数

typedef struct argStr_t{ char strSt[MAX_ARGV_LEN]; }argStr;

本案所使用的是消息队列进行通信,大家可以根据自己的需求进行更改。

异常处理:

如果程序注册监管时发现之前的PID或进程路径存在,kill掉之前的进程。

2.如果程序异常退出则根据路径,和参数重启进程。

3.如果程序取消,或是人为退出或暂停,则不重启该进程。

代码链接如下

https://download.csdn.net/download/mingting1323/10617467


最新回复(0)