日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言程序检测进程pid,C语言实现由PID获取进程名由进程名获取PID

發布時間:2024/9/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言程序检测进程pid,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);

}

總結

以上是生活随笔為你收集整理的c语言程序检测进程pid,C语言实现由PID获取进程名由进程名获取PID的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。