C ++ выяснить использование процессора / памяти - PullRequest
4 голосов
/ 17 февраля 2010

У меня есть приложение на C ++, которое называется ./blah (к которому у меня есть исходный код)

когда я бегу ./blah

Я могу запустить "top" и посмотреть, сколько памяти и процессора "./blah" использует.

Теперь, есть ли у "./blah" доступ к этой информации? То есть когда я запускаю ./blah, я хочу, чтобы он каждую секунду сбрасывал ресурсы процессора и памяти. Какую библиотеку я должен использовать для этого?

Я нахожусь на MacOSX; но я бы предпочел решение, которое работает и в Linux.

Спасибо!

Ответы [ 3 ]

10 голосов
/ 17 февраля 2010

Вы хотите getrusage(). Из справочной страницы :

int getrusage(int who, struct rusage *r_usage);

getrusage() возвращает информацию, описывающую ресурсы, используемые текущим процессом или всеми его завершенными дочерними процессами. Параметр who либо RUSAGE_SELF или RUSAGE_CHILDREN. Буфер, в который будут заполнены r_usage точки, имеет следующую структуру:

struct rusage {
         struct timeval ru_utime; /* user time used */
         struct timeval ru_stime; /* system time used */
         long ru_maxrss;          /* integral max resident set size */
         long ru_ixrss;           /* integral shared text memory size */
         long ru_idrss;           /* integral unshared data size */
         long ru_isrss;           /* integral unshared stack size */
         long ru_minflt;          /* page reclaims */
         long ru_majflt;          /* page faults */
         long ru_nswap;           /* swaps */
         long ru_inblock;         /* block input operations */
         long ru_oublock;         /* block output operations */
         long ru_msgsnd;          /* messages sent */
         long ru_msgrcv;          /* messages received */
         long ru_nsignals;        /* signals received */
         long ru_nvcsw;           /* voluntary context switches */
         long ru_nivcsw;          /* involuntary context switches */
 };
1 голос
/ 17 февраля 2010

Linux предоставляет эту информацию в:

/proc/<pid>/stat

И текущий pid можно получить с помощью:

getpid()

Возвращает pid_t.

Вот фрагмент кода, который я нашел, отображая эту информацию в разумном формате: http://brokestream.com/procstat.html

Я не знаю, работает ли это на Mac OSX.

РЕДАКТИРОВАТЬ: Mac OS X не имеет файловой системы procfs, поэтому это не будет работать для Mac OSX, извините!

0 голосов
/ 17 февраля 2010

Если вы заинтересованы в использовании этой информации для профилирования вашего приложения, вы можете использовать dtrace на OSX:

http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...