Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

monitorowanie zużycia zasobów systemowych

Ostatnio zmodyfikowano 2013-12-11 15:19
Autor Wiadomość
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 ?
P-98880
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
P-98886
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 ?
P-98889
Adik80
» 2013-12-10 16:38:50
dokladniej tworzy kopie procesu.

Nie jest to najpiekniejszy sposob ale mozesz sprobowac cos takiego:
C/C++
#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;
}
P-98896
roserek
Temat założony przez niniejszego użytkownika
» 2013-12-11 15:19:37
Dzięki ;)
P-98980
« 1 »
  Strona 1 z 1