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

 

 

 

 

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值