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); } } }
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; }
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; }
/***************************************************************************** 函 数 名: 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; }