dogcore.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "dogcore.h"
  2. #include "writeshm.h"
  3. DogCore::DogCore(QObject *parent) : QObject(parent)
  4. {
  5. logThread = new LogThread(this);
  6. logThread->start();
  7. isWorking = false;
  8. timer = new QTimer(this);
  9. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  10. for(int i=0;i<5;i++)
  11. chkTime[i] = QDateTime::currentDateTime().toTime_t();
  12. }
  13. unsigned int DogCore::chkrootprocmem(QString proname)
  14. {
  15. FILE *f1=NULL,*f2=NULL;
  16. int pid, vmrss;
  17. char buff[512],name[64];
  18. QString cmd = QString("pgrep %1 -u root").arg(proname);
  19. f1 = popen(cmd.toUtf8().data(),"r");
  20. if(f1==NULL)
  21. return 0;
  22. if(NULL == fgets(buff,512,f1)){
  23. pclose(f1);
  24. return 0;
  25. }
  26. pid = atoi(buff);
  27. pclose(f1);
  28. QString filename = QString("/proc/%1/status").arg(pid);
  29. f2 = fopen(filename.toUtf8().data(),"r");
  30. if(NULL == f2)
  31. return 0;
  32. for(int i=0;i<16;i++)
  33. fgets(buff,512,f2);
  34. fgets(buff,512,f2);
  35. sscanf(buff,"%s %d",name,&vmrss);
  36. fclose(f2);
  37. return (vmrss>>10);
  38. }
  39. void DogCore::time_out()
  40. {
  41. if(!isWorking){
  42. isWorking = true;
  43. uint chkTime1 = QDateTime::currentDateTime().toTime_t();
  44. if((chkTime1-chkTime[1])>300){
  45. chkTime[1]=chkTime1;
  46. if(chkrootprocmem("ytDataWriteProcess")>300){
  47. logThread->appendData(QString("[%1 dataWriteDog %2] %3 chkrootprocmem(ytDataWriteProcess): %4")
  48. .arg(QDateTime::fromTime_t(chkTime1).toString("yyyy-MM-dd HH:mm:ss"))
  49. .arg(chkTime1)
  50. .arg(chkTime[1])
  51. .arg(chkrootprocmem("ytDataWriteProcess")));
  52. system("killall ytDataWriteProcess");
  53. sleep(1);
  54. system("/root/bin/ytDataWriteProcess &");
  55. }
  56. }
  57. if((dataWriteShm->processStatus[1].t_time>0)
  58. &&(static_cast<int>(chkTime1-dataWriteShm->processStatus[1].t_time)>120)){
  59. if(system("killall ytDataWriteProcess")!=-1){
  60. sleep(3);
  61. if(system("/root/bin/ytDataWriteProcess &")!=-1){
  62. logThread->appendData(QString("[%1 dataWriteDog %2] ytDataWriteProcess time out: %3")
  63. .arg(QDateTime::fromTime_t(chkTime1).toString("yyyy-MM-dd HH:mm:ss"))
  64. .arg(chkTime1)
  65. .arg(static_cast<int>(chkTime1-dataWriteShm->processStatus[1].t_time)));
  66. }
  67. }
  68. }
  69. isWorking = false;
  70. }
  71. }
  72. void DogCore::start(){
  73. time_out();
  74. timer->start(5000);
  75. }