Путешествие /proc
на самом деле не намного сложнее, чем popen()
.По сути, вы делаете 3 вещи
- Открываете все отформатированные номера
/proc
записей. - Получите вызов команды через
/proc/<PID>/command
/ - Выполните соответствие регулярному выражению дляназвание процессов, которые вы хотите.
Я упустил некоторые обработки ошибок для ясности, но он должен делать что-то вроде того, что вы хотите.
int
main()
{
regex_t number;
regex_t name;
regcomp(&number, "^[0-9]+$", 0);
regcomp(&name, "<process name>", 0);
chdir("/proc");
DIR* proc = opendir("/proc");
struct dirent *dp;
while(dp = readdir(proc)){
if(regexec(&number, dp->d_name, 0, 0, 0)==0){
chdir(dp->d_name);
char buf[4096];
int fd = open("cmdline", O_RDONLY);
buf[read(fd, buf, (sizeof buf)-1)] = '\0';
if(regexec(&name, buf, 0, 0, 0)==0)
printf("process found: %s\n", buf);
close(fd);
chdir("..");
}
}
closedir(proc);
return 0;
}