Komenda top i jej batch mode
Wśród czeluści parametrów topa można znaleść batch mode, który wg. man’a służy do zapisu do pliku: staje się nieinteraktywny i zrzuca całą swoją zawartość na standardowe wyjście do wystąpienia ^C lub konkretną ilość razy określaną przez parametr -n.
Gdyby chcieć zapisać dane deo zmiennej żeby móc wyciągnąć z nich dajmy na to obciążenie procesora wywołamy komedę:
top -bn 1
Ale naszym oczom nie ukaże się aktualne obciążenie procesora tylko średnie od rozruchu. Tak samo zachowuje się interaktywny top po starcie: najpierw wartość średnia i dopiero drugie odświeżenie to wartość właściwa.
Rozwiązanie problemu przychodzi po chwili zastanowienia. W kodzie parsera (np. Perlowym):
$top_raw=`top -bn 2`;
$top_pojedynczy = substr($top_raw, index($top_raw, "top - ", 1));
Ważny szczegół: index musi zaczynać od offset’u równego 1, gdyż inaczej natrafiłby na nagłówek topa w pozycji zerowej tym samym nic nie robiąc.
Niestety dodanie parametru delay (-d sekundy.dziesiąte_części) zaburza iteracje i wciąż wartością widzianą jest obciążenie średnie 🙁