#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);
}