Я думаю, что для сценариев perl или shell вполне нормально читать и анализировать / proc / data. В программе на C, если требуется устойчивость, я бы использовал интерфейс ядра (вероятно, sysctl
).
Оказывается, что реализация pmap в комплекте разбирает /proc/PID/maps
файлов построчно следующим образом (см. one_proc()
функция):
sscanf(mapbuf,"%"KLF"x-%"KLF"x %31s %Lx %x:%x %Lu", &start, &end, flags, &file_offset, &dev_major, &dev_minor, &inode);
РЕДАКТИРОВАТЬ : в оригинальной версии моего ответа был показан способ анализа данных только в сегментах общей памяти, а не всех отображенных сегментов памяти в соответствии с желаемым OP.
Полагаю, ipcs -m
даст вам одинаковые данные для нескольких процессов. Итак, ответ на ваш второй вопрос заключается в том, что вы должны прочитать код ipcs
: (например, версия BSD , версия Linux ):