封装一个c函数,获取指定名称进程的pid信息
时间: 2024-05-13 13:15:29 浏览: 70
以下是一个获取指定进程名称的 PID 的 C 函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <ctype.h>
// 获取进程的 PID
int get_pid(const char* process_name) {
DIR* dir;
struct dirent* entry;
char path[100];
char exec_path[200];
char buf[100];
int pid;
dir = opendir("/proc");
if (!dir) {
perror("Failed to open /proc directory");
return -1;
}
while ((entry = readdir(dir)) != NULL) {
if (isdigit(*entry->d_name)) {
pid = atoi(entry->d_name);
sprintf(path, "/proc/%d/cmdline", pid);
FILE* fp = fopen(path, "r");
if (fp) {
if (fgets(buf, sizeof(buf), fp)) {
sscanf(buf, "%s", exec_path);
if (strcmp(process_name, exec_path) == 0) {
fclose(fp);
closedir(dir);
return pid;
}
}
fclose(fp);
}
}
}
closedir(dir);
return -1;
}
```
该函数接受一个进程名称作为参数,并返回该进程的 PID。该函数打开 /proc 目录,遍历其中的文件夹,如果文件夹名称是数字,就认为这是一个进程的 PID。然后,打开进程的 cmdline 文件,读取其中的进程名称,与参数中指定的进程名称进行比较。如果二者相同,则返回该进程的 PID。如果遍历完所有的进程都没有找到指定的进程,则返回 -1。
阅读全文