C语言获取进程路径:通过进程名称查找

本文提供一个 C 语言代码示例,演示如何通过进程名称获取其可执行文件路径。该代码通过读取 /proc 文件系统中的进程信息实现。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <errno.h>

char* get_process_path(char* process_name) {
    DIR* proc_dir = opendir("/proc");
    if (proc_dir == NULL) {
        printf("Failed to open /proc directory: %s\n", strerror(errno));
        return NULL;
    }

    struct dirent* proc_entry;
    while ((proc_entry = readdir(proc_dir)) != NULL) {
        if (isdigit(*proc_entry->d_name)) {
            char proc_path[256];
            snprintf(proc_path, sizeof(proc_path), "/proc/%s/exe", proc_entry->d_name);

            char exe_path[256];
            ssize_t len = readlink(proc_path, exe_path, sizeof(exe_path));
            if (len == -1) {
                continue; // skip this entry
            }
            exe_path[len] = '\0';

            char* exe_name = strrchr(exe_path, '/');
            if (exe_name == NULL) {
                continue; // skip this entry
            }
            exe_name++;

            if (strcmp(exe_name, process_name) == 0) {
                char* process_path = malloc(strlen(exe_path) + 1);
                strcpy(process_path, exe_path);
                closedir(proc_dir);
                return process_path;
            }
        }
    }

    closedir(proc_dir);
    return NULL;
}

int main(int argc, char** argv) {
    if (argc != 2) {
        printf("Usage: %s <process_name>\n", argv[0]);
        return 1;
    }

    char* process_name = argv[1];
    char* process_path = get_process_path(process_name);
    if (process_path == NULL) {
        printf("Failed to find process with name %s\n", process_name);
        return 1;
    }

    printf("Process path: %s\n", process_path);
    free(process_path);
    return 0;
}

代码解释:

  1. get_process_path 函数:
    • 打开 /proc 目录。
    • 循环遍历 /proc 目录下的所有条目,判断每个条目是否为数字(进程 ID)。
    • 构建进程可执行文件路径 /proc/<pid>/exe
    • 使用 readlink 函数读取该路径的符号链接,获取可执行文件路径。
    • 解析可执行文件路径,提取可执行文件名,并与输入的进程名称进行比较。
    • 如果匹配,则分配内存并复制可执行文件路径,并返回该路径。
  2. main 函数:
    • 检查命令行参数数量,确保输入了进程名称。
    • 调用 get_process_path 函数获取进程路径。
    • 打印获取到的进程路径或错误信息。

使用方法:

在命令行中输入进程名称,例如:

./get_process_path firefox

该代码将查找名为 firefox 的进程,并输出其可执行文件路径。

注意:

  • 该代码依赖于 Linux 操作系统中的 /proc 文件系统,可能无法在其他系统上运行。
  • 该代码仅能获取运行中的进程的可执行文件路径,如果进程已结束,则无法获取其路径。
  • 由于系统调用 readlink 的限制,该代码可能无法获取所有进程的路径,例如,对于某些系统调用自身创建的进程,该代码无法获取其路径。

希望本文对您有所帮助。如果您还有其他问题,请随时提出。

C语言获取进程路径:通过进程名称查找

原文地址: http://www.cveoy.top/t/topic/nnI2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录