Теперь мой проект основан на многопроцессорности, и я пытаюсь вычислить некоторые параметры каждого процесса, такие как использование процессора, использование io. Я использую C ++, и мой проект работает под Linux. Может ли какой-нибудь проект lib или open source решить эту проблему?
Ядро выставляет такие параметры через /proc
файловая система, см. Proc (5) для большего.
Файлы внутри /proc/
обычно являются текстовыми файлами и должны читаться последовательно (они генерируются на лету, как трубы; часто стат (2) на них даёт 0 бессмысленных размеров). Чтение этих псевдофайлов не требует дискового ввода-вывода, поэтому выполняется очень быстро.
Попробуйте, например, следующие команды:
cat /proc/self/maps
cat /proc/$$/status
Например, чтобы получить размер программы progsize
(на самом деле размер процесса) процесса PID pid
вы могли бы сделать:
long progsize= -1;
pid_t pid = something();
char path[32];
snprintf (path, sizeof(path), "/proc/%d/statm", (int) pid);
FILE *fil = fopen(path, "r");
if (fil) {
fscanf(fil, "%ld", &progsize);
fclose(fil);
} else { perror(path); exit(EXIT_FAILURE); };
Возможно, вы захотите разобрать /proc/1234/stat
для определения времени (и размера резидентного набора, то есть используемой оперативной памяти и т. д. и т. д.) информации pid 1234.
Для ваших законченных дочерних процессов используйте также wait4 (2) который заполняет struct rusage
о дочернем процессе, см. также getrusage (2)