Linux [c] 中同名的进程数

Number of processes with same name in Linux [c]

我无法实现具有相同 PID 的 运行 个进程的整数输出。 例如。

ps aux | grep program1    

向我展示了 3 个进程,其中 2 个是我的主应用程序(父应用程序和子应用程序)。我想知道如何在 C 中获取它。我的意思是获取数字“2”,因为我有两个同名的进程。据我所知,我无法将终端输出到 C 变量,所以我真的不知道如何获取 it.The 问题是我必须在 progmam2 而不是 program1 上获取此信息。

谢谢!

看看这个,我觉得这个一点都不高级

#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <limits.h>
#include <fcntl.h>

void readProcessName(const char *const comm, char name[PATH_MAX])
{
    int fd;
    int size;

    fd = open(comm, O_RDONLY);
    if (fd == -1)
        return;
    if ((size = read(fd, name, PATH_MAX)) > 1)
        name[size - 1] = '[=10=]';
    else
        name[0] = '[=10=]';
    close(fd);
}

void findProcessByName(const char *const find)
{
    DIR           *dir;
    struct dirent *entry;

    dir = opendir("/proc");
    if (dir == NULL)
        return;
    chdir("/proc");
    while ((entry = readdir(dir)) != NULL)
    {
        struct stat st;
        char        comm[PATH_MAX];
        const char *name;
        char        procname[PATH_MAX];

        name = entry->d_name;
        if (stat(name, &st) == -1)
            continue;
        if (S_ISDIR(st.st_mode) == 0)
            continue;
        /* this will skip .. too, and any hidden file? there are no hidden files I think */
        if (name[0] == '.')
            continue;
        snprintf(comm, sizeof(comm), "%s/comm", name);
        if (stat(comm, &st) == -1)
            continue;
        readProcessName(comm, procname);
        if (strcmp(procname, find) == 0)
            printf("%s pid: %s\n", procname, name);
    }
    closedir(dir);
}

int main(int argc, char **argv)
{
    findProcessByName("process-name-here");
    return 0;
}