跳转到帖子
登录关注  
墨香年少

linux下用c++一秒检测一次程序是不是存在,不存在则拉起

已推荐帖子

#include <stdio.h>   
#include <stdlib.h>   
#include <unistd.h>   
#include <fcntl.h>   
#include <limits.h>   
#include <sys/types.h>   
#include <sys/wait.h>   
 
#define BUFSZ 150   
 
void err_quit(char *msg);

int main(int argc, char *argv[])
{   
	
	FILE* fp;
	int count;
	char buf[BUFSZ];   
	char command[150];   

	sprintf(command, "ps -ef | grep MainServer | grep -v grep | wc -l" );
	
	while(1)
	{
		if((fp = popen(command,"r")) == NULL)
		{
			err_quit("popen");
		}
		if( (fgets(buf,BUFSZ,fp))!= NULL ) 
		{ 
			count = atoi(buf);   
			if(count  == 0)
			{
				//进程不存在,需要启动
				system("/server/mainserver/MainServer &");
				printf("已经重新拉起!\n");
			}
			else
			{
				//进程存在
				printf("进程存在\n");
			}
		}
		
		usleep(1000000); //1秒
	}

	pclose(fp);   
	return EXIT_SUCCESS;
}

void err_quit(char *msg)
{

	perror(msg);   
	exit(EXIT_FAILURE);   
}

附上守护进程代码:

void set_daemon(){
	int ret_code = fork();
	if (ret_code < 0){
		exit(1);
	}else if (ret_code>0){
		exit(0);
	}
	setsid();
	ret_code = fork();
	if (ret_code < 0){
		exit(1);
	}else if (ret_code>0){
		exit(0);
	}
	chdir(".");
	umask(0);
	for(int fd = 0;fd< getdtablesize();fd++){
		close(fd);
	}
}

int main(int argc, char *argv[])
{
    set_daemon();
    return 0;
}

 


目之所及,皆是回忆,心之所想,皆是过往

分享这篇帖子


链接帖子
分享到其他站点

创建帐户或登录来提出意见

你需要成为会员才能提出意见

创建帐户

注册成为会员。只要几个简单步骤!

注册帐户

登录

已有帐户? 请登录。

现在登录
登录关注  

×
×
  • 创建新的...

重要信息

注册必须使用2-8个中文汉字作为账号