bool StatFormBase::ConnectGuardMain() { DetachShm (); if (AttachShm (0, (void **)&pInfoHead) >= 0) { pProcInfoHead = &pInfoHead->ProcInfo; } else { return false; } return true; }
//连接共享内存 int Channel::connectGuardMain() { DetachShm (); if(AttachShm (0, (void **)&m_pInfoHead) >= 0) //连接GuardMain { m_pProcInfoHead = &m_pInfoHead->ProcInfo; //得到进程信息首地址 } else { //Log::log(0,"运行时告警:连接共享内存失败,GuardMain可能不存在\n"); //ALARMLOG(0,MBC_schedule+24,"%s","连接共享内存失败,GuardMain可能不存在"); return -1; } return 0; }
//根据processId 启动进程 int Hbinstalltest::beginRunPro(int iProcessId) { if(iProcessId <= 0) return -1; THeadInfo *pInfoHead = NULL; TProcessInfo *pProcInfoHead = NULL; if((AttachShm(0,(void **)&pInfoHead))<0) //联入共享内存,取进程信息 { Log::log(0,"联入监控共享缓冲区不存在"); return -1; } pProcInfoHead = &(pInfoHead->ProcInfo); if(pProcInfoHead == NULL) return -1; for (int i=0; i<pInfoHead->iProcNum; i++) { if(pProcInfoHead[i].iProcessID==iProcessId) { int iSysPID = pProcInfoHead[i].iSysPID; if(iSysPID != 0) { if(kill(iSysPID,0) == 0) { Log::log(0,"需要启动的process_id=%d对应的程序已经启动,请检查!",iProcessId); return 0; } } if (pProcInfoHead[i].iState != ST_RUNNING && \ pProcInfoHead[i].iState != ST_INIT) { pProcInfoHead[i].iState = ST_WAIT_BOOT; Log::log(0,"成功致标志位,进程 process_id=%d 启动!!",iProcessId); return 0; } } continue; } Log::log(0,"共享内存找不到需要启动的 process_id=%d 进程 %d",iProcessId); return -1; }
/*进程启停状态判断*/ int Hbinstalltest::processState(int m_process) { THeadInfo *pInfoHead = NULL; TProcessInfo *pProcInfoHead = NULL; if((AttachShm(0,(void **)&pInfoHead))<0) //联入共享内存,取进程信息 { Log::log(0,"联入监控共享缓冲区不存在"); return -1; } pProcInfoHead = &(pInfoHead->ProcInfo); for(int i=0; i<pInfoHead->iProcNum;i++) { if(pProcInfoHead[i].iProcessID != m_process); else { while(true) { if(pProcInfoHead[i].iState == 2 || \ pProcInfoHead[i].iState == 8) { Log::log(0,"进程%d启动成功",m_process); return 0; } else if(pProcInfoHead[i].iState == 6 || \ pProcInfoHead[i].iState == 5 || \ pProcInfoHead[i].iState == 0 || \ pProcInfoHead[i].iState == 7) { Log::log(0,"进程%d未能启动,请检查log目录下process_%d.log",m_process,m_process); return -1; } else { sleep (2); continue; } } } } Log::log(0,"没有找到要检查的进程 %d",m_process); return -1; }
/*void** malloc2d(int line, int col,int unitsize) { int i; int col_size=col*unitsize; int index_size=line*sizeof(void*); void **a=(void**)malloc(index_size+line*col_size); char *data_start=(char*)a+index_size; for(i=0;i<line;++i) a[i]=data_start+i*col_size; return a; }*/ int init_loop(struct loopbuf** loop,int *shmid,char *shmpath,int id){ // int shmid; *shmid=CreateShm(shmpath,id,sizeof(UC_ShmMemory)); *loop=(UC_ShmMemory*)AttachShm(*shmid); //my_lock_init(*loop); (*loop)->looplen=ROW; (*loop)->buflen=COL; (*loop)->tail=0; (*loop)->head=0; printf("aaa\n"); return 1; //sem_init(&loop->sem,0,0); // memset(loop->recvlen,0,MAX_RECV_QUEUE*sizeof(int)); // loop->p=(char**)malloc2d(row,col,typelen); }
//根据processId 停止启动进程 int Hbinstalltest::stopPro(int iProcessId) { if(iProcessId <= 0) return -1; THeadInfo *pInfoHead = NULL; TProcessInfo *pProcInfoHead = NULL; if((AttachShm(0,(void **)&pInfoHead))<0) //联入共享内存,取进程信息 { Log::log(0,"联入监控共享缓冲区不存在"); return -1; } pProcInfoHead = &(pInfoHead->ProcInfo); if(pProcInfoHead == NULL) return -1; for (int i=0; i<pInfoHead->iProcNum; i++) { if(pProcInfoHead[i].iProcessID==iProcessId) { if (pProcInfoHead[i].iState==ST_RUNNING || pProcInfoHead[i].iState==ST_INIT) { pProcInfoHead[i].iState = ST_WAIT_DOWN; Log::log(0,"成功致标志位,进程 process_id=%d 停止!!",iProcessId); return 0; } } continue; } return 0; }
int GetProcInfo () { struct tm *pre; long clock = 0; char sCPU[100], sMEM[100]; char sProcName[PROCESS_NAME_LEN]; int iTmpBillFlowID=-1, iTmpProcessID=-1; //已经显示的最大ID int iTmpAppID = -1; int iSelecetdPos = -2; int iListPos=0; // char tmp[128] = {0}; int ret = 0; InitList(); /* Control *pEdit = GetCtlByID(process_handle, 13); gStr2Arr(pEdit->sData); */ g_iflowid[0] = 0; Control *pEdit1 = GetCtlByID(process_handle, 15); gStr2Appid(pEdit1->sData); DetachShm (); if (AttachShm (0, (void **)&pInfoHead) >= 0) { pProcInfoHead = &pInfoHead->ProcInfo; } else { return -1; } time ((time_t *)&clock); memset(aiProcessID, 0, MAX_APP_NUM*sizeof(int)); iSelecetdPos = -1; while (iListPos < pInfoHead->iProcNum) { int iSelecetdPos = SearchNextNode(&iTmpBillFlowID, &iTmpProcessID,&iTmpAppID); //iSelecetdPos=6;//= SearchNextNode(&iTmpBillFlowID, &iTmpProcessID,&iTmpAppID); if (iSelecetdPos < 0) break; // // if( g_iflowid[0] && iTmpBillFlowID != g_iflowid ) // continue; if( ((g_iflowid[0] && !IsInArr( iTmpBillFlowID )))||((g_iappid[0] && !IsInAppid( iTmpAppID ))) || !(pProcInfoHead+iSelecetdPos)->iBillFlowID || !(pProcInfoHead+iSelecetdPos)->iProcessID ) continue; strncpy( sProcName, (pProcInfoHead+iSelecetdPos)->sName, PROCESS_NAME_LEN); sProcName[PROCESS_NAME_LEN] ='\0'; if ((pProcInfoHead+iSelecetdPos)->iState == ST_RUNNING) { memset(sCPU,0,sizeof(sCPU)); memset(sMEM,0,sizeof(sMEM)); pre = localtime ((const time_t *)&(pProcInfoHead+iSelecetdPos)->lLoginTime); GetSysProcInfo ((pProcInfoHead+iSelecetdPos)->iSysPID, sMEM, sCPU); memset( proc_list_data[iListPos],0,strlen(proc_list_data[iListPos]) ); sprintf (proc_list_data[iListPos], "%-4d %6d %-20s %02d%02d%02d%02d %11d %-4s %5s %3s%\0", (pProcInfoHead+iSelecetdPos)->iAppID, (pProcInfoHead+iSelecetdPos)->iProcessID, sProcName, pre->tm_mon+1, pre->tm_mday, pre->tm_hour, pre->tm_min, (pProcInfoHead+iSelecetdPos)->iAllTickets, gsState[(pProcInfoHead+iSelecetdPos)->iState], sMEM, sCPU ); } else { sprintf (proc_list_data[iListPos], "%-4d %6d %-20s -------- %11d %-4s %5d %3d%\0", (pProcInfoHead+iSelecetdPos)->iAppID, (pProcInfoHead+iSelecetdPos)->iProcessID, sProcName, (pProcInfoHead+iSelecetdPos)->iAllTickets, gsState[(pProcInfoHead+iSelecetdPos)->iState], 0, 0 ); } proc_list_index[iListPos] = proc_list_data[iListPos]; aiProcessID[iListPos] = (pProcInfoHead+iSelecetdPos)->iProcessID; iListPos++; //插入InfoList InfoList[ret] = pProcInfoHead+iSelecetdPos; ret ++; //iSelecetdPos = -1; } l_lprocnum = ret; return ret; }