kpr保持你的程序一直在运行

前天找了个云IDE平台将IRC机器人挂进去了,这样就可以保持机器人一直处于在线的状态,但是却有一个问题,那就是如果机器人遇到了意外退出了怎么办?当然可以在机器人程序中再加代码在保持当robot程序遇到意外退出时重新启动,但其实我挂的的robot不只一个,所以我就想到了另一种方法,那就是写个程序,让它在后台运行,动态检测指定的程序是否还处于”运行“状态,如果被检测的程序不处于”运行“状态则立即重新启动该程序,于是乎就有了kpr,kpr是keep process run的缩写,意思是保持进程运行,因为我会要kprd守护进程中检测和运行要保持一直运行的程序

该程序的运行步骤是这样的,首先程序会创建一个进程信息队列,这个进程信息队列中信息的来源于配置文件,在配置文件中每一行中书写着要进程检测的程序和一些信息,每行有三个以tab分隔的字符串,这三个字符串分别为要运行检查的程序的名称、要运行检测的程序的绝对路径以及要运行检测的程序的相关参数,每一行都是这种格式
然后在读入并创建了进程信息队列后,再遍历整个进程信息队列,并创建一个子进程在子进程中再启动这些程序并将该子程序的pid存入相应进程信息队列中
要运行检测的程序启动完毕后父进程阻塞等待某个子进程退出—-检测程序是否处于“运行”状态
如果检测到某个子进程退出,则根据将退出子程序的pid与进程信息队列中进行比较来确定是哪个程序退出了
找到该程序后创建新的子进程在子进程中再次启动退出的程序,并更新新的pid到相应的进程信息队列中
如此往复,则可以达到被检测的程序一直在“运行”,说起来这个灵感还来自于red hat linux的inted守护进程

kpr的代码可以在此处得到:https://github.com/briskgreen/kpr

–阅读次数(28)

发表评论

电子邮件地址不会被公开。

*