monitorowanie zużycia zasobów systemowych
Ostatnio zmodyfikowano 2013-12-11 15:19
roserek Temat założony przez niniejszego użytkownika |
monitorowanie zużycia zasobów systemowych » 2013-12-10 11:25:15 Witam. Mam napisany program i chciałbym dołączyć do niego funkcję której zadaniem będzie zapisywać logi ( obiążenia procesora i pamięci przez program ). Program będzie działał na serwerze jako deamon. W pliki systemowe nie mam wglądu ( brak uprawnień ). Czy da się w jakiś w miarę prosty sposób wyciągnąć tego typu informacje ? |
|
Adik80 |
» 2013-12-10 12:29:51 pod linuxem /proc/stat na prawa odczytu dla kazdego, ale mozesz tez zrobic forka i wolasz top ( -d 1 -p PID) z przekierowaniem wyjscia do rury a po drugiej stronie czytac i parsowac dane |
|
roserek Temat założony przez niniejszego użytkownika |
» 2013-12-10 13:06:27 Dzięki za oddzew, mógłbys mi jakoś przybliżyć ten sposób z forkiem. Wiem że jest to funkcja do tworzenia nowych wątków ale w jaki sposób wyciągnąć info o danym procesie ? |
|
Adik80 |
» 2013-12-10 16:38:50 dokladniej tworzy kopie procesu. Nie jest to najpiekniejszy sposob ale mozesz sprobowac cos takiego: #define err(s) { fprintf(stderr, "%s\n", s); exit(EXIT_FAILURE); }
int main() { int fd[ 2 ]; if( pipe( fd ) == - 1 ) err( "pipe error" ); switch( fork() ) { case - 1: err( "fork error" ); case 0: { close( fd[ 0 ] ); fflush( stdout ); if( dup2( fd[ 1 ], STDOUT_FILENO ) ==- 1 || dup2( fd[ 1 ], STDERR_FILENO ) ==- 1 ) err( "dup error" ); close( fd[ 1 ] ); char szArgs[ 30 ]; sprintf( szArgs, "-d 1 -p %d", getppid() ); execl( "/usr/bin/top", "top", szArgs, 0 ); } default: { close( fd[ 1 ] ); char c[ 129 ]; int r; while( 1 ) { r = read( fd[ 0 ], c, sizeof( char ) * 128 ); if( r > 0 ) { c[ r ] = 0; printf( "<%s>", c ); } } } } retur 0; } |
|
roserek Temat założony przez niniejszego użytkownika |
» 2013-12-11 15:19:37 Dzięki ;) |
|
« 1 » |