zoukankan      html  css  js  c++  java
  • 用c实现进程监控,如果某一进程退出则重启

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

  • 相关阅读:
    iOS中Zbar二维码扫描的使用
    SOJ 1135. 飞跃原野
    SOJ 1048.Inverso
    SOJ 1219. 新红黑树
    SOJ 1171. The Game of Efil
    SOJ 1180. Pasting Strings
    1215. 脱离地牢
    1317. Sudoku
    SOJ 1119. Factstone Benchmark
    soj 1099. Packing Passengers
  • 原文地址:https://www.cnblogs.com/fensnote/p/13436516.html
Copyright © 2011-2022 走看看