当前位置: 技术问答>linux和unix
请教如何获得运行的程序的名称?象MS的GetModuleFileName一样?
来源: 互联网 发布时间:2015-02-21
本文导语: 请教如何获得运行的程序的名称?象MS的GetModuleFileName一样? | 大家好,初学linux,请多指教。 我在应用中需要判断已知pid的进程的名字,还需要判断已知名字的进程是否在运行。 勉强写了个函数,请大家...
请教如何获得运行的程序的名称?象MS的GetModuleFileName一样?
|
大家好,初学linux,请多指教。
我在应用中需要判断已知pid的进程的名字,还需要判断已知名字的进程是否在运行。
勉强写了个函数,请大家多指导。
#include
#include
#include
#include
#include
//此函数获取所有运行中进程的ID以及文件名,可以根据需要加上参数进行比较等
void GetAllProcessNameAndID()
{
int i;
char buf[256],temp[100],filename[1024]="";
char *exename;
pid_t pid;
DIR* dp;
struct dirent *dirp;
dp=opendir("/proc");
chdir("/proc");
FILE *fp;
while((dirp=readdir(dp))!=NULL)//搜索所有的进程ID
{
memset(temp,0,100);
memset(filename,0,1024);
memset(buf,0,256);
if(!(isdigit( dirp->d_name[0])))
continue;
strcpy(temp,"/proc/");
strcat(temp, dirp->d_name);
strcat(temp,"/stat");
fp=fopen(temp,"r");//从/Proc//stat文件中获取文件名
//若获取绝对文件名请在在maps文件中解析
fgets(buf,256,fp);
fclose(fp);
if(strlen(buf)==0)
continue;
exename=strtok(buf,"()");
exename=strtok(NULL,"()");
/*
dirp->d_name是次进程的ID
已经获取了该进程的文件名(exename)
加入你自己的处理过程(和给定的进程名比较等) */
}
closedir(dp);
}
/*确实是初学,头疼的很,大家不要笑话我。:)*/
我在应用中需要判断已知pid的进程的名字,还需要判断已知名字的进程是否在运行。
勉强写了个函数,请大家多指导。
#include
#include
#include
#include
#include
//此函数获取所有运行中进程的ID以及文件名,可以根据需要加上参数进行比较等
void GetAllProcessNameAndID()
{
int i;
char buf[256],temp[100],filename[1024]="";
char *exename;
pid_t pid;
DIR* dp;
struct dirent *dirp;
dp=opendir("/proc");
chdir("/proc");
FILE *fp;
while((dirp=readdir(dp))!=NULL)//搜索所有的进程ID
{
memset(temp,0,100);
memset(filename,0,1024);
memset(buf,0,256);
if(!(isdigit( dirp->d_name[0])))
continue;
strcpy(temp,"/proc/");
strcat(temp, dirp->d_name);
strcat(temp,"/stat");
fp=fopen(temp,"r");//从/Proc//stat文件中获取文件名
//若获取绝对文件名请在在maps文件中解析
fgets(buf,256,fp);
fclose(fp);
if(strlen(buf)==0)
continue;
exename=strtok(buf,"()");
exename=strtok(NULL,"()");
/*
dirp->d_name是次进程的ID
已经获取了该进程的文件名(exename)
加入你自己的处理过程(和给定的进程名比较等) */
}
closedir(dp);
}
/*确实是初学,头疼的很,大家不要笑话我。:)*/