linux c进程监控

我们经常需要实现进程监控,如果某一进程异常退出或是跑飞则立即重启。通常使用的有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;

 

 

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

异常处理:

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

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

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

 

代码链接如下

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

 

 

 

 

 

 

你可能感兴趣的:(设计思路)