CheckSystemTask.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /*
  2. * CheckTask.c
  3. *
  4. * Created on: 2021年9月2日
  5. * Author: 7564
  6. */
  7. #include "CheckSystemTask.h"
  8. #include "Config.h"
  9. #define TASK_CNT_MAIN 5
  10. #define TASK_CNT_EV_COMM 2
  11. #define TASK_CNT_PSU_COMM 2
  12. #define TASK_CNT_SBOX_COMM 3
  13. bool Taskconutstring(char *src, char *taskname)
  14. {
  15. bool result = false;
  16. if (src == NULL || strlen(src) == 0)
  17. return result;
  18. if (strstr(src, taskname) != NULL &&
  19. strstr(src, "grep") == NULL &&
  20. strstr(src, "[") == NULL)
  21. {
  22. result = true;
  23. }
  24. return result;
  25. }
  26. int GetProcessCount(char *procName)
  27. {
  28. int result = 0;
  29. FILE *fp;
  30. char cmd[256];
  31. char buf[256];
  32. sprintf(cmd, "ps -ef |grep %s", procName);
  33. fp = popen(cmd, "r");
  34. if(fp != NULL)
  35. {
  36. while(fgets(buf, sizeof(buf), fp) != NULL)
  37. {
  38. if (Taskconutstring(buf, procName))
  39. result++;
  40. }
  41. }
  42. pclose(fp);
  43. return result;
  44. }
  45. unsigned char CheckSystemTask(unsigned char systemPage)
  46. {
  47. unsigned char result = 0;
  48. unsigned char count_main = GetProcessCount("Module_CSU");
  49. unsigned char count_evComm = GetProcessCount("Module_EvComm");
  50. unsigned char count_psuComm = GetProcessCount("Module_PsuComm");
  51. unsigned char count_sboxComm = GetProcessCount("Module_SmartBox");
  52. if (count_main == 0)
  53. count_main = GetProcessCount("main");
  54. // printf("*************************** \n");
  55. // printf("count_main = %d \n", count_main);
  56. // printf("count_eventLog = %d \n", count_eventLog);
  57. // printf("count_primary = %d \n", count_primary);
  58. // printf("count_evComm = %d \n", count_evComm);
  59. // printf("count_lcmCtrl = %d \n", count_lcmCtrl);
  60. // printf("count_interComm = %d \n", count_interComm);
  61. // printf("count_psuComm = %d \n", count_psuComm);
  62. // printf("*************************** \n");
  63. if (systemPage == _LCM_FIX || systemPage == _LCM_EMC)
  64. {
  65. if (count_main < TASK_CNT_MAIN || count_psuComm < TASK_CNT_PSU_COMM || count_sboxComm < TASK_CNT_SBOX_COMM)
  66. {
  67. system("killall Module_EventLogging");
  68. system("killall Module_PrimaryComm");
  69. system("killall Module_EvComm");
  70. system("killall Module_LcmControl");
  71. system("killall Module_InternalComm");
  72. system("killall Module_PsuComm");
  73. system("killall OcppBackend");
  74. system("killall Module_4g");
  75. system("killall Module_Wifi");
  76. system("killall Module_DcMeter");
  77. system("killall Module_SmartBox");
  78. sleep(3);
  79. system("/usr/bin/run_evse_restart.sh");
  80. }
  81. else
  82. {
  83. if(system("pidof -s Module_EventLogging > /dev/null") != 0)
  84. system("/root/Module_EventLogging &");
  85. if(system("pidof -s Module_PrimaryComm > /dev/null") != 0)
  86. system("/root/Module_PrimaryComm &");
  87. if(system("pidof -s Module_LcmControl > /dev/null") != 0)
  88. system("/root/Module_LcmControl &");
  89. if(system("pidof -s Module_InternalComm > /dev/null") != 0)
  90. system("/root/Module_InternalComm &");
  91. if (count_evComm < TASK_CNT_EV_COMM)
  92. {
  93. system("killall Module_EvComm");
  94. sleep(3);
  95. system("/root/Module_EvComm &");
  96. }
  97. }
  98. sleep(2);
  99. }
  100. if (count_main < TASK_CNT_MAIN)
  101. result = _SYSTEM_TASK_LOST_ITEM_MAIN;
  102. else if (count_evComm < TASK_CNT_EV_COMM)
  103. result = _SYSTEM_TASK_LOST_ITEM_EVCOMM;
  104. else if (count_psuComm < TASK_CNT_PSU_COMM)
  105. result = _SYSTEM_TASK_LOST_ITEM_PSUCOMM;
  106. else if (count_sboxComm < TASK_CNT_SBOX_COMM)
  107. result = _SYSTEM_TASK_LOST_ITEM_SMARTBOX;
  108. else if (system("pidof -s Module_EventLogging > /dev/null") != 0)
  109. result = _SYSTEM_TASK_LOST_ITEM_EVENTLOG;
  110. else if (system("pidof -s Module_PrimaryComm > /dev/null") != 0)
  111. result = _SYSTEM_TASK_LOST_ITEM_PRIMARYCOMM;
  112. else if (system("pidof -s Module_LcmControl > /dev/null") != 0)
  113. result = _SYSTEM_TASK_LOST_ITEM_LCMCONTROL;
  114. else if (system("pidof -s Module_InternalComm > /dev/null") != 0)
  115. result = _SYSTEM_TASK_LOST_ITEM_INTERCOMM;
  116. return result;
  117. }