#include "monitsys.h" void getPidByName(pid_t *pid, char *task_name) { DIR *dir; struct dirent *ptr; FILE *fp; char filepath[50]; char cur_task_name[50]; char buf[BUF_SIZE]; dir = opendir("/proc"); if (NULL != dir) { while ((ptr = readdir(dir)) != NULL) //循环读取/proc下的每一个文件/文件夹 { //如果读取到的是"."或者".."则跳过,读取到的不是文件夹名字也跳过 if ((strcmp(ptr->d_name, ".") == 0) || (strcmp(ptr->d_name, "..") == 0)) continue; if (DT_DIR != ptr->d_type) continue; sprintf(filepath, "/proc/%s/status", ptr->d_name);//生成要读取的文件的路径 fp = fopen(filepath, "r"); if (NULL != fp) { if( fgets(buf, BUF_SIZE-1, fp)== NULL ) { fclose(fp); continue; } sscanf(buf, "%*s %s", cur_task_name); //如果文件内容满足要求则打印路径的名字(即进程的PID) if (!strcmp(task_name, cur_task_name)) { sscanf(ptr->d_name, "%d", pid); } fclose(fp); } } closedir(dir); } } FILE *getshellvalue(char *pcmd) { FILE * fstream = NULL; if(NULL == (fstream = popen(pcmd,"r"))) { fprintf(stdout,"execute command failed: "); return NULL; } //pcmd = "ls -trl | awk '{print $9}'"; return fstream; } int main(void) { pid_t fpid; //fpid表示fork函数返回的值 pid_t fpid1; char pcip[50]="\0",task_name[50]="\0",cmanager[50]="\0"; FILE *fp = NULL; fp = fopen ("/root/cheng/initip.ini", "r"); if(fp == NULL) { printf("
open file:passwd.txt error
"); return 0; } // fscanf(fp,"%s %s %s %s",pcip,task_name,cmanager,manprocess); fgets(pcip, sizeof(pcip), fp); fgets(task_name, sizeof(task_name), fp); fgets(cmanager, sizeof(cmanager), fp); // fgets(manprocess, sizeof(manprocess), fp); fclose(fp); printf("name of task is %s\n",cmanager); getPidByName(&pid, cmanager); if (pid > 0) { printf("\nCapture dump function enable..\n"); printf("pid1:%d\n", pid); } else { printf("\nCapture dump function disable..\n"); printf("pid2:%d\n\n", pid); } return 0; }