프로 세 스 모니터링 을 c 로 실행 합 니 다. 프로 세 스 가 종료 되면 다시 시작 합 니 다.
5581 단어 linux-c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//
#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
printf("%s is running!
", name);
return 1;
}
else{
printf("%s is not running!
", 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
");
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);
}