/********************************************************************* *Copyright(c) 2018,国电南瑞科技股份公司 *All rights reserved. * *Filename: proc_common.h *Modulename: libproc_common.so *Description: proc manager *Author: chenboyu guwenjie *Date Version Description of modification ==================================================================== *2018/08/20 1.0 Create *2018/11/12 1.1 modify ********************************************************************/ #ifndef _PROC_COMMON_H_ #define _PROC_COMMON_H_ #ifndef _WINDOWS64 #include "sysadm/proc_define.h" #endif #include using std::vector; namespace NS_SYSADMIN { #ifndef _WINDOWS64 struct ProcAdmInfo { char scn_name[SCN_MAX_NAME_LEN];//场景名 char subscn_name[SCN_MAX_NAME_LEN];//子场景名 char label[Length::StringLen];//标识 int scn_id;//场景号 int subscn_id;//子场景号 int scn_inst;//场景实例号 int subscn_inst;//子场景实例号 char subscn_label[Length::StringLen];//子场景标识,为了扩展用 char proc_name[Length:: NameLen];//进程名 pid_t proc_pid;//进程号 char cmd[Length::SentenceLen]; public: int copyFrom(ProcessInfo proc) { strcpy(scn_name,proc.m_scn_name); strcpy(subscn_name,proc.m_subscn_name); strcpy(label,proc.m_scn_label); scn_id=proc.m_scn_id; subscn_id=proc.m_subscn_id; scn_inst=proc.m_scn_inst; subscn_inst=proc.m_subscn_inst; strcpy(subscn_label,proc.m_scn_label); strcpy(proc_name,proc.m_process_name); proc_pid=proc.m_process_id; strcpy(cmd,proc.m_cmd); return 1; } bool scn_match(int tmp_scn_id,int tmp_subscn_id,int tmp_scn_inst,int tmp_subscn_inst) { return ((tmp_scn_id == scn_id) && (tmp_subscn_id == subscn_id) && (tmp_scn_inst == scn_inst) && (tmp_subscn_inst== subscn_inst)); } }; #endif class CProcCommonImpl; #ifdef _WINDOWS64 #ifdef PROC_COMMON_EXPORTS #define PROC_COMMON_API __declspec(dllexport) #else #define PROC_COMMON_API __declspec(dllimport) #endif #else #define PROC_COMMON_API #endif class PROC_COMMON_API CProcCommon { public: CProcCommon (int rw = 1); ~CProcCommon(); #ifndef _WINDOWS64 //一下4个running接口 -1:not running, 1:running int is_proc_running(const int proc_id); int is_proc_running(const char* cmd);//返回的是此cmd在运行的个数,要注意 int is_proc_running(ProcessInfo& proc_info); int is_proc_running(int scn_id, int scn_inst,int subscn_id,int subscn_inst, char* process_name,pid_t & proc_id); int proc_init (int scn_id, int subscn_id, char* process_name, int scn_inst = 1,int subscn_inst = 1); int proc_init (const char* scn_name, const char* subscn_name, char* process_name, const char* label = NULL, const char* subscn_lable = NULL); int proc_init (const char* scn_name, const char* subscn_name, char* process_name, int subscn_inst, int scn_inst = 1, const char* label = NULL, const char* subscn_lable = NULL); int proc_init (long cluster_id, int task_id, int number_no, char* process_name,long container_id = 0); int proc_init (char* process_name,long container_id); //必须容器中进程使用,container_id不能为0 int proc_insert (ProcessInfo& proc_info); int proc_insert (char* process_name, long container_id); int proc_insert (int info_nums,vector& proc_infos); int proc_get (vector& proc_info); int proc_get (vector& proc_info); int proc_get (long container_id, vector& proc_info); int proc_get(char *process_name,long container_id,ProcessInfo& proc_info); int proc_get(int scn_id, int scn_inst,int subscn_id,int subscn_inst,vector& proc_info); int proc_get(int scn_id, int scn_inst,int subscn_id,int subscn_inst,char* process_name, long container_id,ProcessInfo& proc_info); int proc_get(int position,ProcAdmInfo& proc_info); int proc_get(int position,struct ProcessInfo& proc_info); int proc_update (char* process_name, long container_id,unsigned char run_status); int proc_update (char* process_name, long container_id, ProcessInfo& proc_info); int proc_update(int scn_id, int scn_inst,int subscn_id,int subscn_inst,char* process_name,long container_id,ProcessInfo& proc_info); int proc_update(int scn_id, int scn_inst,int subscn_id,int subscn_inst,char* process_name,unsigned char run_status); int proc_update(ProcessInfo& proc_info,float cpu_occupy,int mem_occupy); int proc_update(ProcessInfo& proc_info,time_t start_time); int proc_update(ProcessInfo& proc_info,int value,int location); int proc_shut (char* process_name, long container_id); int proc_shut(int scn_id, int scn_inst,int subscn_id,int subscn_inst, char* process_name); int proc_shut(int pid); int proc_exit(int position); int proc_report (int position,unsigned char run_status, int period); int proc_clear_all(); int proc_show_mem(); int get_active_pid(int &num, int *pid_list); int clear_exit_proc_info(int position); int clear_oneproc_shm(int scn_id, int scn_inst,int subscn_id,int subscn_inst, char* process_name); int set_procshm_check(int check_value); int proc_add(struct ProcessInfo& proc_info); #endif private: CProcCommonImpl *m_impl; public: //windows or linux,cmd是进程名 不是cmdline int is_proc_running(const char *cmd,vector &pid_vec); }; } #endif