Exemplo n.º 1
0
/** 
 *@brief  主函数 启动子进程运行主体程序 并用父进程监控子进程的运行状况
 */
int main(int argc, char** argv)
{
	if( logs_init("wizard_logs") ){
		printf("DATA_ERROR:%s %d -- logs_init error!!!!\n",__FILE__, __LINE__);
		exit(-1);
	}

	// 守护进程(父进程)
	int status;
	for(;;){
		if(0 == fork() ){
			run();
		}
		xyprintf(0, "ELF_THREAD:The child process is running!");
	    waitpid(-1, &status, 0);
		xyprintf(0, "ELF_THREAD:The child process is dead!");
		if(WIFSIGNALED(status)) {
			xyprintf(0, "ELF_THREAD:The child process is dead! Signal is %d", WTERMSIG(status) );
        }
	}
}
Exemplo n.º 2
0
void init() {
	/* Load persistent settings, or set the default values. */
	if(persistent_load() == -1) {
		wanted_temperature = TEMP_DEF;
		wanted_humidity = HUM_DEF;
	}

	i2c_init();
	httpd_init();
	logs_init();
	pid_init();

	struct sigaction sa = (struct sigaction) {
		.sa_handler = &reload,
		.sa_flags = 0,
		.sa_restorer = NULL
	};

	sigemptyset(&(sa.sa_mask));
	sigaddset(&(sa.sa_mask), SIGUSR1);
	sigaddset(&(sa.sa_mask), SIGINT);
	sigaddset(&(sa.sa_mask), SIGTERM);

	if(sigaction(SIGUSR1, &sa, NULL) < 0) {
		fprintf(stderr, "Couldn't install signal handler.\n");
		exit(1);
	}

	sa.sa_handler = &end;
	
	if(sigaction(SIGTERM, &sa, NULL) < 0 || sigaction(SIGINT, &sa, NULL) < 0) {
		fprintf(stderr, "Couldn't install signal handler.\n");
		exit(1);
	}
}

void reload(int signal) {
	httpd_reload();
}

int main(int argc, char **argv) {
	float data[2];

	init();

	struct timespec ts;
	clock_gettime(CLOCK_MONOTONIC, &ts);
	for(;;) {
		if(!read_data(data)) {
			continue;
		}

		log_values(data[1], data[0]);
		pid_control(data[1], data[0]);
		stats();

		if(logstdout(data) == EOF) {
			break;
		}

		delay_ns(&ts, PERIOD_S, 0);
	}

	end();
}
Exemplo n.º 3
0
/** 
 *@brief  主体程序 由子进程运行
 */
void run()
{
	//关闭 父进程打开的log文件
	logs_destroy();
	//打开 子进程的log文件
	if( logs_init("logs") ){
		printf("DATA_ERROR:%s %d -- logs_init error!!!!\n",__FILE__, __LINE__);
		exit(-1);
	}

	//打印程序启动标志信息
	xyprintf(0, "\n\t\t\t*************************************************************************\n\
			*************************************************************************\n\
			****                                                                 ****\n\
			****                 The Authenticate is running!                    ****\n\
			****                          Pid is %d                            ****\n\
			****                             %s                              ****\n\
			****                                                                 ****\n\
			*************************************************************************\n\
			*************************************************************************\n",
			getpid(), PROFRAM_VERSION);

	//获取配置
	if( get_config() ){
		xyprintf(0, "DATA_ERROR:%s %d -- Get config of datebase is failed!", __FILE__, __LINE__);
		sleep(1000);
		exit(-1);
	}

	pthread_mutex_init(&gv_list_lock, 0);
	pthread_mutex_init(&gv_simple_gg2_list_lock, 0);
	pthread_mutex_init(&gv_up_addr_lock, 0);
	pthread_mutex_init(&gv_guide_flag_lock, 0);
	
	//信号屏蔽
	signal(SIGPIPE, SIG_IGN);
	
/*************************thread pool run*********************************************/
	pool_init(48, 192, 16, cgv_sql_name, cgv_sql_user, cgv_sql_pass);
	sleep(1);
/*************************与guide交互线程**********************************************/
	pthread_t guide_mutual_pt;
	if( pthread_create(&guide_mutual_pt, NULL, guide_mutual_thread, NULL) != 0 ){
		xyprintf(errno, "PTHREAD_ERROR: %s %d -- pthread_create()", __FILE__, __LINE__);
	}
/**************************************************************************************/

	while(1){
		pthread_mutex_lock(&gv_guide_flag_lock);
		if(gv_guide_flag){
			auth_sql_repair(gv_auth_code);
			pthread_mutex_unlock(&gv_guide_flag_lock);
			break;
		}
		pthread_mutex_unlock(&gv_guide_flag_lock);
		sleep(1);
	}

/*************************路由器连接监听线程******************************************/
	pthread_t router_conn_pt;
	if( pthread_create(&router_conn_pt, NULL, router_conn_thread, NULL) != 0 ){
		xyprintf(errno, "PTHREAD_ERROR: %s %d -- pthread_create()", __FILE__, __LINE__);
	}
/*************************路由器epoll线程*********************************************/
	pthread_t router_epoll_pt;
	if( pthread_create(&router_epoll_pt, NULL, router_epoll_thread, NULL) != 0 ){
		xyprintf(errno, "PTHREAD_ERROR: %s %d -- pthread_create()", __FILE__, __LINE__);
	}
/*************************mac上线 允许上网处理线程************************************/
	pthread_t platform_conn_thread_pt;
	if( pthread_create(&platform_conn_thread_pt, NULL, platform_conn_thread, NULL) != 0 ){
		xyprintf(errno, "PTHREAD_ERROR: %s %d -- pthread_create()", __FILE__, __LINE__);
	}
	//pthread_t scanSQL_online_pt;
	//if( pthread_create(&scanSQL_online_pt, NULL, scanSQL_online_thread, NULL) != 0 ){
	//	xyprintf(errno, "PTHREAD_ERROR: %s %d -- pthread_create()", __FILE__, __LINE__);
	//}
/*************************mac踢出 处理线程********************************************/
	pthread_t scanSQL_takeout_pt;
	if( pthread_create(&scanSQL_takeout_pt, NULL, scanSQL_takeout_thread, NULL) != 0 ){
		xyprintf(errno, "PTHREAD_ERROR: %s %d -- pthread_create()", __FILE__, __LINE__);
	}
/*************************定时重启设备线程*********************************************/
	pthread_t timing_restart_pt;
	if( pthread_create(&timing_restart_pt, NULL, timing_restart_thread, NULL) != 0 ){
		xyprintf(errno, "PTHREAD_ERROR: %s %d -- pthread_create()", __FILE__, __LINE__);
	}
/**************************************************************************************/
	
	while(1){
		sleep(1000);
	}
	
	//执行不到的地方
	pthread_mutex_destroy(&gv_up_addr_lock);
	pthread_mutex_destroy(&gv_list_lock);
	pthread_mutex_destroy(&gv_simple_gg2_list_lock);
	pthread_mutex_destroy(&gv_guide_flag_lock);
}