CheckSystemTask.c 3.5 KB

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