我遇到了使用相同PID实现正在运行的进程数的int输出的问题。 例如。
ps aux | grep program1
显示了我的3个进程,2个主应用程序(父和子)。我想知道如何在C中得到它。我的观点是得到数字" 2"因为我有两个同名的进程。据我所知,我无法将终端输出转换为C变量,所以我真的不知道如何得到它。问题是我必须在progmam2上得到这个信息而不是program1。
谢谢!
答案 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;
}