300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言怎么获取进程名 C语言实现由PID获取进程名由进程名获取PID

c语言怎么获取进程名 C语言实现由PID获取进程名由进程名获取PID

时间:2019-11-12 05:34:51

相关推荐

c语言怎么获取进程名 C语言实现由PID获取进程名由进程名获取PID

当制作多个项目的时候,我们可以把多个应用程序集成在一起,就像网页的href一样,在几个进程中跳转,这里就在C语言中实现获取进程号,然后kill掉它,启动另外一个应用程序,就这样我们就轻松实现了应用程序的模块化,但是我们没有考虑效率什么的,

只是为了实现这样一个功能。

下面是一个获取进程和进程名的程序代码,自己可以灵活运用在自己的代码中,在C语言中也可以代用脚本程序,充分结合让你的应用程序更加强壮。

#include

#include

#include

#include

#define BUF_SIZE 1024

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);

}

}

void getNameByPid(pid_t pid, char *task_name) {

char proc_pid_path[BUF_SIZE];

char buf[BUF_SIZE];

sprintf(proc_pid_path, "/proc/%d/status", pid);

FILE* fp = fopen(proc_pid_path, "r");

if(NULL != fp){

if( fgets(buf, BUF_SIZE-1, fp)== NULL ){

fclose(fp);

}

fclose(fp);

sscanf(buf, "%*s %s", task_name);

}

}

void main(int argc, char** argv)

{

char task_name[50];

pid_t pid = getpid();

printf("pid of this process:%d\n", pid);

getNameByPid(pid, task_name);

/*

strcpy(task_name, argv[0]+2);

printf("task name is %s\n", task_name);

getPidByName(task_name);

*/

printf("getNameByPid:%s\n", task_name);

getPidByName(&pid, task_name);

printf("getPidByName:%d\n", pid);

sleep(15);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。