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;
}
我无法实现具有相同 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;
}