/* * CheckTask.c * * Created on: 2021年9月2日 * Author: 7564 */ #include "CheckSystemTask.h" #include "Config.h" #define TASK_CNT_MAIN 5 #define TASK_CNT_EV_COMM 2 #define TASK_CNT_PSU_COMM 2 #define TASK_CNT_SBOX_COMM 3 bool Taskconutstring(char *src, char *taskname) { bool result = false; if (src == NULL || strlen(src) == 0) return result; if (strstr(src, taskname) != NULL && strstr(src, "grep") == NULL && strstr(src, "[") == NULL) { result = true; } return result; } int GetProcessCount(char *procName) { int result = 0; FILE *fp; char cmd[256]; char buf[256]; sprintf(cmd, "ps -ef |grep %s", procName); fp = popen(cmd, "r"); if(fp != NULL) { while(fgets(buf, sizeof(buf), fp) != NULL) { if (Taskconutstring(buf, procName)) result++; } } pclose(fp); return result; } unsigned char CheckSystemTask(unsigned char systemPage) { unsigned char result = 0; unsigned char count_main = GetProcessCount("Module_CSU"); unsigned char count_evComm = GetProcessCount("Module_EvComm"); unsigned char count_psuComm = GetProcessCount("Module_PsuComm"); unsigned char count_sboxComm = GetProcessCount("Module_SmartBox"); if (count_main == 0) count_main = GetProcessCount("main"); // printf("*************************** \n"); // printf("count_main = %d \n", count_main); // printf("count_eventLog = %d \n", count_eventLog); // printf("count_primary = %d \n", count_primary); // printf("count_evComm = %d \n", count_evComm); // printf("count_lcmCtrl = %d \n", count_lcmCtrl); // printf("count_interComm = %d \n", count_interComm); // printf("count_psuComm = %d \n", count_psuComm); // printf("*************************** \n"); if (systemPage == _LCM_FIX || systemPage == _LCM_EMC) { if (count_main < TASK_CNT_MAIN || count_psuComm < TASK_CNT_PSU_COMM || count_sboxComm < TASK_CNT_SBOX_COMM) { system("killall Module_EventLogging"); system("killall Module_PrimaryComm"); system("killall Module_EvComm"); system("killall Module_LcmControl"); system("killall Module_InternalComm"); system("killall Module_PsuComm"); system("killall OcppBackend"); system("killall Module_4g"); system("killall Module_Wifi"); system("killall Module_DcMeter"); system("killall Module_SmartBox"); sleep(3); system("/usr/bin/run_evse_restart.sh"); } else { if(system("pidof -s Module_EventLogging > /dev/null") != 0) system("/root/Module_EventLogging &"); if(system("pidof -s Module_PrimaryComm > /dev/null") != 0) system("/root/Module_PrimaryComm &"); if(system("pidof -s Module_LcmControl > /dev/null") != 0) system("/root/Module_LcmControl &"); if(system("pidof -s Module_InternalComm > /dev/null") != 0) system("/root/Module_InternalComm &"); if (count_evComm < TASK_CNT_EV_COMM) { system("killall Module_EvComm"); sleep(3); system("/root/Module_EvComm &"); } } sleep(2); } if (count_main < TASK_CNT_MAIN) result = _SYSTEM_TASK_LOST_ITEM_MAIN; else if (count_evComm < TASK_CNT_EV_COMM) result = _SYSTEM_TASK_LOST_ITEM_EVCOMM; else if (count_psuComm < TASK_CNT_PSU_COMM) result = _SYSTEM_TASK_LOST_ITEM_PSUCOMM; else if (count_sboxComm < TASK_CNT_SBOX_COMM) result = _SYSTEM_TASK_LOST_ITEM_SMARTBOX; else if (system("pidof -s Module_EventLogging > /dev/null") != 0) result = _SYSTEM_TASK_LOST_ITEM_EVENTLOG; else if (system("pidof -s Module_PrimaryComm > /dev/null") != 0) result = _SYSTEM_TASK_LOST_ITEM_PRIMARYCOMM; else if (system("pidof -s Module_LcmControl > /dev/null") != 0) result = _SYSTEM_TASK_LOST_ITEM_LCMCONTROL; else if (system("pidof -s Module_InternalComm > /dev/null") != 0) result = _SYSTEM_TASK_LOST_ITEM_INTERCOMM; return result; }