如何获取linux下的进程pid列表
2013-02-01 15:30
615 查看
有时候,我们需要在移植后的系统上监视linux的进程,有时候需要在新的软件上面进行进程的管理,如何仅仅用system(ps)将会多一个进程并且分析并不是很高效。在proc文件目录下,我们可以看到所有进程的文件(文件名为数字都是对应的pid进程,里面含有对应的进程信息。),在此之前查看比较官方文档会比较清楚。
---------------------------------------------------------
由此,我们可以简单的发现有两个方法能监测到进程的状态,一个经过system的调用,第二经过读取proc目录下的对应文件。
我就可以选择第二种来获取进程的pid列表。
------------------------------------------------------------
函数
功能:获取进程的pid列表和pid总数
输入参数:无
输出参数:进程pid列表指针,pid总数的指针,由上层分配
返回值:0 成功 -1 为失败
-------------------------------------------------------------
#include <dirent.h> //struct DIR
int get_process_IDs (unsigned int* uPid,unsigned int* count)
{
#define READ_BUF_SIZE 1024
DIR* dir;
struct dirent *next;
long pidList;
FILE* status;
char filename[READ_BUF_SIZE];
int i =0;
if(count == NULL || uPid == NULL)
{
//DBGPrint(DBG_DEBUG_OS,DBG_API,"error happened in LINE=%d,FUN=%s\n",__LINE__,__FUNCTION__);
return -1;
}
dir = opendir("/proc");
if(!dir)
{
printf("Cannot open /proc\n");
return -1;
}
//遍历/proc 目录下所有文件,找到数字文件名并记录
while((next = readdir(dir)) != NULL)
{
if(strcmp( next->d_name,".") == 0)
{
continue;
}
if(!isdigit(next->d_name[0]))
{
continue;
}
sprintf(filename,"/proc/%s/status",next->d_name);
if(!(status = fopen(filename,"r")))
{
continue;
}
//找到一个进程,记录pid
pidList = strtol(next->d_name,NULL,0);
uPid[i++] = (CMW_U32)pidList;
if(i >= *count)
{
break;
}
}
closedir(dir);
*count = i;
return 0;
}
---------------------------------------------------------
由此,我们可以简单的发现有两个方法能监测到进程的状态,一个经过system的调用,第二经过读取proc目录下的对应文件。
我就可以选择第二种来获取进程的pid列表。
------------------------------------------------------------
函数
功能:获取进程的pid列表和pid总数
输入参数:无
输出参数:进程pid列表指针,pid总数的指针,由上层分配
返回值:0 成功 -1 为失败
-------------------------------------------------------------
#include <dirent.h> //struct DIR
int get_process_IDs (unsigned int* uPid,unsigned int* count)
{
#define READ_BUF_SIZE 1024
DIR* dir;
struct dirent *next;
long pidList;
FILE* status;
char filename[READ_BUF_SIZE];
int i =0;
if(count == NULL || uPid == NULL)
{
//DBGPrint(DBG_DEBUG_OS,DBG_API,"error happened in LINE=%d,FUN=%s\n",__LINE__,__FUNCTION__);
return -1;
}
dir = opendir("/proc");
if(!dir)
{
printf("Cannot open /proc\n");
return -1;
}
//遍历/proc 目录下所有文件,找到数字文件名并记录
while((next = readdir(dir)) != NULL)
{
if(strcmp( next->d_name,".") == 0)
{
continue;
}
if(!isdigit(next->d_name[0]))
{
continue;
}
sprintf(filename,"/proc/%s/status",next->d_name);
if(!(status = fopen(filename,"r")))
{
continue;
}
//找到一个进程,记录pid
pidList = strtol(next->d_name,NULL,0);
uPid[i++] = (CMW_U32)pidList;
if(i >= *count)
{
break;
}
}
closedir(dir);
*count = i;
return 0;
}
相关文章推荐
- Linux 父进程如何获取子进程返回值?parent get child process return value,fork,wait,wait_pid
- Linux有问必答:如何在脚本中获取进程ID(PID)
- linux下ss命令源码学习(二):linux c代码获取后台进程名称及pid
- linux 下根据进程名字获取进程的进程号PID,类似pidof,C函数
- Linux驱动获取进程PID和进程名字
- Linux如何安装使用pidstat命令以对进程数据进行监控
- linux C 获取pid终极父进程的PID
- linux下获取指定exe进程pid和详细信息的命令
- Linux下如何在进程中获取虚拟地址对应的物理地址【转】
- linux 根据 进程名 获取 对应 PID 来 判断 使用 内存情况
- java如何获取本地操作系统进程列表
- Linux/macOS 获取进程PID、杀死进程
- JAVA实现获取Linux下进程PID并杀掉进程
- Linux开发已知进程名字获取PID号(C语言)
- Linux获取进程pid
- linux获取一个进程pid的父进程的两种方法
- Linux获取进程列表
- Linux获取监听指定端口的进程PID
- Linux命令 -- 获取 进程信息:name 、stat 、PID