Linux获取进程列表
来源:互联网 发布:ubuntu安装mysql5.7 编辑:程序博客网 时间:2024/05/22 00:35
实现思路是:遍历/proc目录下的所有进程描述文件夹,从而获取进程列表。
代码如下:
#include <stdio.h>#include <dirent.h>#include <unistd.h>#include <stdlib.h>#include <string.h>typedef struct{ pid_t pid; char name[256];//进程名称 int vmsize;//虚拟内存信息}proc_info_st;//保存读取的进程信息#define PROC_NAME_LINE 1//名称所在行#define PROC_PID_LINE 4//pid所在行#define PROC_VMSIZE_LINE 12//虚拟内存所在行#define BUFF_LEN 1024 //行缓冲区的长度void read_proc(proc_info_st* info,const char* c_pid);//读取进程信息int read_line(FILE* fp,char* buff,int b_l,int l);//读取一行int main(){ //打开目录 DIR *dir; struct dirent *ptr; if (!(dir = opendir("/proc"))) return 0; //读取目录 while (ptr = readdir(dir)) {//循环读取出所有的进程文件 if (ptr->d_name[0] > '0' && ptr->d_name[0] <= '9') { //获取进程信息 proc_info_st info; read_proc(&info,ptr->d_name);//读取信息 printf("pid:%d\npname:%s\nvmsize:%d\n",info.pid,info.name,info.vmsize); printf("\n\n");//再空两行 } }closedir(dir);}/************************************************** **说明:根据进程pid获取进程信息,存放在proc_info_st结构体中 ** **输入: ** /proc_info_st* info 返回进程信息 ** /char* c_pid 进程pid的字符串形式 ** ** ** *************************************************/void read_proc(proc_info_st* info,const char* c_pid){ FILE* fp = NULL; char file[512] = {0}; char line_buff[BUFF_LEN] = {0};//读取行的缓冲区 sprintf(file,"/proc/%s/status",c_pid);//读取status文件 if (!(fp = fopen(file,"r"))) { printf("read %s file fail!\n",file); return; } char name[32]; //先读取进程名称 if (read_line(fp,line_buff,BUFF_LEN,PROC_NAME_LINE)) { sscanf(line_buff,"%s %s",name,(info->name)); } fseek(fp,0,SEEK_SET);//回到文件头部 //读取进程pid if (read_line(fp,line_buff,BUFF_LEN,PROC_PID_LINE)) { sscanf(line_buff,"%s %d",name,&(info->pid)); } fseek(fp,0,SEEK_SET);//回到文件头部 //读取进程vmsize if (read_line(fp,line_buff,BUFF_LEN,PROC_VMSIZE_LINE)) { sscanf(line_buff,"%s %d",name,&(info->vmsize)); } fclose(fp); }/************************************************** **说明:读取文件的一行到buff ** **输入: ** /FILE* fp 文件指针 ** /char* buff 缓冲区 ** /int b_l 缓冲区的长度 ** /l 指定行 ** **输出: ** /true 读取成功 ** /false 读取失败 *************************************************/int read_line(FILE* fp,char* buff,int b_l,int l){ if (!fp) return false; char line_buff[b_l]; int i; //读取指定行的前l-1行,转到指定行 for (i = 0; i < l-1; i++) { if (!fgets (line_buff, sizeof(line_buff), fp)) { return false; } } //读取指定行 if (!fgets (line_buff, sizeof(line_buff), fp)) { return false; } memcpy(buff,line_buff,b_l); return true;}
0 0
- Linux获取进程列表
- 获取进程列表
- 获取进程列表
- Android 获取进程列表
- 获取进程列表、进程命令行、结束进程
- Linux守护进程列表
- Linux守护进程列表
- 获取进程列表、名称、路径
- 获取进程、服务、任务列表
- vb.net 获取进程列表
- 获取系统进程列表与终止进程
- Linux进程PID散列表
- Linux进程PID散列表
- linux的进程散列表
- 提权获取进程路径并获取进程列表
- VC获取系统进程列表、查找进程、关闭进程
- Linux获取进程ID
- linux 获取进程信息
- 菜单项Menu学习
- asp.net中cookie和session的区别和相关使用
- 当glibc detected *** free(): invalid next size (normal)出现
- PHP学习笔记
- Java的异常大全
- Linux获取进程列表
- lwIP(V1.3.0)RAW_API译文
- GPU编程之GLSL(六)——着色与逐顶点光照
- 基于 REST 的 Web 服务
- mysql基本够用了
- 黑马视频学习笔记-指针(一)
- 表单编码方式设置
- poj 题号
- UVA11538-Chess Queen