Linux中具有相同名称的进程数[E]

时间:2015-01-10 16:10:14

标签: c linux process grep

我遇到了使用相同PID实现正在运行的进程数的int输出的问题。 例如。

ps aux | grep program1    

显示了我的3个进程,2个主应用程序(父和子)。我想知道如何在C中得到它。我的观点是得到数字" 2"因为我有两个同名的进程。据我所知,我无法将终端输出转换为C变量,所以我真的不知道如何得到它。问题是我必须在progmam2上得到这个信息而不是program1。

谢谢!

1 个答案:

答案 0 :(得分:2)

检查一下,我认为这根本没有进展

#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] = '\0';
    else
        name[0] = '\0';
    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;
}