1,寫一個服務,用exec或popen執行ps的命令列,根據該程序的名字獲取該程序的pid。
sprintf(cmd, "ps -ef|grep %s ",name);
pstr=popen(cmd, "r");
然後php定時的請求這個機器上的程序狀態,如果程序掛掉了,可以做個預警。
2,如果想做的更多,監視當前每個程序的資源消耗,比如CPU,記憶體,根據程序的id,可以去拿到/proc/pid/status中的一些資料,比如:
//獲取程序佔用記憶體
unsigned int get_proc_mem(unsigned int pid){
char file_name[64]={0};
FILE *fd;
char line_buff[512]={0};
sprintf(file_name,"/proc/%d/status",pid);
fd =fopen(file_name,"r");
if(nullptr == fd){
return 0;
}
char name[64];
int vmrss;
for (int i=0; i<VMRSS_LINE-1;i++){
fgets(line_buff,sizeof(line_buff),fd);
sscanf(line_buff,"%s %d",name,&vmrss);
fclose(fd);
return vmrss;
然後你就可以透過一些圖形做一些動態展示了。
1,寫一個服務,用exec或popen執行ps的命令列,根據該程序的名字獲取該程序的pid。
sprintf(cmd, "ps -ef|grep %s ",name);
pstr=popen(cmd, "r");
然後php定時的請求這個機器上的程序狀態,如果程序掛掉了,可以做個預警。
2,如果想做的更多,監視當前每個程序的資源消耗,比如CPU,記憶體,根據程序的id,可以去拿到/proc/pid/status中的一些資料,比如:
//獲取程序佔用記憶體
unsigned int get_proc_mem(unsigned int pid){
char file_name[64]={0};
FILE *fd;
char line_buff[512]={0};
sprintf(file_name,"/proc/%d/status",pid);
fd =fopen(file_name,"r");
if(nullptr == fd){
return 0;
}
char name[64];
int vmrss;
for (int i=0; i<VMRSS_LINE-1;i++){
fgets(line_buff,sizeof(line_buff),fd);
}
fgets(line_buff,sizeof(line_buff),fd);
sscanf(line_buff,"%s %d",name,&vmrss);
fclose(fd);
return vmrss;
}
然後你就可以透過一些圖形做一些動態展示了。