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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牙周病治疗方法有哪些
- 下一篇: 牙源性鼻窦炎会自愈吗