예제 #1
0
s32 main(s32 argc, s8 **argv)
{
    s32 ret;
    fd_set rset;
    struct timeval tv; 
    srvlog_adx_cfg_s cfg;
    
    if(ERROR_FAIL == srvlog_adx_rs_init(&cfg))
    {
        unlink(SRVLOG_ADX_PID_FILE);
        return ERROR_FAIL;
    }
    output_pid(SRVLOG_ADX_PID_FILE);
	
	while(1)
	{
	    tv.tv_sec = 1;
        tv.tv_usec = 0;		

	    FD_ZERO(&rset);
	    FD_SET(cfg.fd, &rset);
	    
        ret = select(cfg.fd + 1, &rset, NULL, NULL, &tv);
        if(ret < 0)
        {
            continue;
        }
        if(FD_ISSET(cfg.fd, &rset))
		{	
			srvlog_adx_rs_process_log(&cfg);
		}
	}
}
예제 #2
0
파일: ifmd.c 프로젝트: millken/zhuxianB30
s32 main(int argc ,char **argv)
{    
    s32 ret;
	char pid_file[64] = {0};
	
	sprintf(pid_file, "%s%s", PATH_IFMD_PID_PREFIX, PATH_PID_POSTFIX);	
    ret = daemon(0,0);
    output_pid(pid_file);

    syslogex_syslog_send("ifmd",LOG_NOTICE|LOG_DAEMON,"IFM daemon in started!");
    
    if(ret < 0)
    {
        return 1;
    }
	
	ret  = if_loop_check();
	

    return ret;
}
예제 #3
0
파일: cross.cpp 프로젝트: chenbk85/gserver
int main(int argc, char *argv[])
{ 
  if (argc == 1)
    print_usage();
  
  int in_guard_mode = 0;
  int dump_core = 0;
  int children_instance = 0;
  char *run_as_user = NULL;

  // parse args
  int c = -1;
  extern char *optarg;
  extern int optopt;

  const char *opt = ":gvu:Cs:ep:h";
  while((c = getopt(argc, argv, opt)) != -1)
  {
    switch (c)
    {
    case 'v':        // version
      fprintf(stderr, "\033[0;32m%s %s\033[0m\n", SVC_EDITION, BIN_V);
      return 0;
    case 'g':
      in_guard_mode = 1;
      break;
    case 'u':
      run_as_user = optarg;
      break;
    case 'C':
      dump_core = 1;
      break;
    case 'e':
      children_instance = 1;
      break;
    case 'p':
      break;
    case ':':
      fprintf(stderr, 
              "\n\033[0;35mOption -%c requires an operand\033[0m\n",
              optopt);
    case 'h':
    default:
      print_usage();
    }
  }

  const int max_clients = 1024*4;
  set_max_fds(max_clients);
  g_max_fds = get_max_fds();

  if (run_as_user && runas(run_as_user) != 0)
  {
    fprintf(stderr, "\033[0;35mSudo to %s error!\033[0m\n", 
            run_as_user);
    return -1;
  }

  if (dump_core && dump_corefile() != 0)
  {
    fprintf(stderr, "\033[0;35mSet dump corefile error!\033[0m\n");
    return -1;
  }

  if (in_guard_mode)
  {
    if (children_instance == 0)
      guard_process(g_svc_name, argc, argv);

    clean_fds();
  }else
    output_pid(g_svc_name);

  //= child process
  child_sig_handle();

  sys::r = new reactor();
  if (sys::r->open(max_clients, max_clients + 16) != 0)
  {
    fprintf(stderr, "Error: reactor - open failed!\n");
    return -1;
  }

  if (sys::init_svc() != 0)
  {
    fprintf(stderr, "Error: init_svc - init failed!\n");
    return -1;
  }

  s_log->rinfo("launch ok! max fds:%d", g_max_fds);
  e_log->rinfo("launch ok! max fds:%d", g_max_fds);

  // reactor event loop
  sys::r->run_reactor_event_loop();
  return 1;
}
예제 #4
0
파일: sysmd.c 프로젝트: millken/zhuxianB30
/*****************************************************************************
 函 数 名: main
 功能描述: 设备管理进程入口
 输入参数: argc                 ---- argv数组长度
           argv                 ---- 入参数组
 输出参数: 无
 返 回 值: 无
 -----------------------------------------------------------------------------
 最近一次修改记录:
 修改作者: Fuzhiqing
 修改目的: 新增函数
 修改日期: 2009-08-19
*****************************************************************************/
s32 main(s32 argc, s8 ** argv)
{
    s32 c;
	s32 daemon_flag;
	s8	dev_type[64];
    s32 sys_result;
    u32 scanTime;
	s32 ret;
	s32 socket;
	struct dev_temp_status *dev_status;

	/*如果有-d选项,则后台运行*/
    daemon_flag = 1;
    while((c = getopt(argc,argv,"d")) != -1)
    {
        switch(c)
        {
            case 'd':
                daemon_flag = 0;
                break;
            default :
                break;
        }
    }

    if(optind != argc)
    {
         printf("Usage: %s [-d]\n",argv[0]);
         return 1;
    }

    if(daemon_flag)
    {
        ret = daemon(0,0);
        if(ret < 0)
        {
            syslogex_syslog_send("SYSM",LOG_WARNING|LOG_USER,DAEMON_START_FAILL , strerror(errno));
            return 1;
        }
    }

    output_pid("/var/run/sysmd.pid");
    syslogex_syslog_send("SYSM",LOG_NOTICE|LOG_DAEMON,DAEMON_START_SUCCESS);

    /*恢复数据库保存的默认 */
    wrap_drv_get_device_type(dev_type, sizeof(dev_type));
    if(0 == strncmp("DPX",dev_type,3))
    {
        dpx_restore_threshold(1);
        sys_write_device_mode();
        sys_restore_cpu_packet_limit();
    }
    else
    {
        restore_threshold();
        if(0 == strncmp("SW", dev_type, 2))
        {
            /* 将能力集检查移到内核去做,省一次系统调用开销 */
            /* 默认配置50毫秒 */
            scanTime = 50;
            conplat_syscall(MODULEID_SYSM, SYSM_SYSCALL_SET_SCAN_TIME, &scanTime, sizeof(u32), &sys_result);
            sys_restore_cpu_packet_limit();
        }
    }
   
    /*获取设备槽数,避免开启vsm后,槽数变大*/
	if(ifm_get_slot_num((u32 *)&slot_num) != ERROR_SUCCESS)
	{
		return ERROR_FAIL;
	}

    dev_status =(struct dev_temp_status*)malloc(slot_num * sizeof(struct dev_temp_status));
	if(dev_status == NULL)
	{
		return ERROR_FAIL;
	}
	
	/*将dev_status清0,状态初始化都为0*/
    memset(dev_status, 0, slot_num * sizeof(struct dev_temp_status));

    /*dloop定时器的初始化*/
	dloop_init();

	ret = event_cfcard_init(&socket);
	if(ERROR_SUCCESS == ret)
	{
    	/*注册监听cf sock的信号处理函数*/
    	dloop_register_read_sock(socket, event_cf_handler, NULL, NULL);
	}
	
    /*定时检测cpu利用率*/
    dloop_register_timeout(DETECT_CPU_USAGE_CYCLE, 0, cpu_scan_handler, dev_status);
	/*定时检测内存利用率*/
	dloop_register_timeout(DETECT_MEM_USAGE_CYCLE, 0, mem_scan_handler, dev_status);
	/*定时检测温度*/
	dloop_register_timeout(DETECT_TEMP_CYCLE, 0, temp_scan_handler, dev_status);
	/*定时检测外存*/
	dloop_register_timeout(DETECT_PART_USAGE_CYCLE, 0, part_scan_handler, NULL);
	/*定时检测风扇和电源*/
	dloop_register_timeout(DETECT_MEM_USAGE_CYCLE, 0, fan_power_scan_handler, NULL);
	
	dloop_run();
    /* dloop_run为死循环,以下代码在出错时才能走到 */
	if(dev_status != NULL)
	{
		free(dev_status);
	}
	
	dloop_destroy();
	
	return ERROR_FAIL;

}