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