Próbuję napisać skrypt, który może monitorować użycie procesora przez proces (w celu utworzenia wykresu).
Jak dotąd jest to polecenie, którego używam
ps -p $PROCID -o cputime,etimes
Moją jedyną obawą jest to, że wydajność cputime wydaje się być [dd]hh:mm
(lub coś podobnego, nie mogę teraz zapamiętać z góry głowy)
Czy istnieje sposób sformatowania cputime w sekundach, coś w rodzaju etime -> etimes, aby uzyskać upływ czasu w sekundach?
Edycja: To jest wynik, który obecnie otrzymuję
2-03:01:33 2653793
Chciałbym, aby pierwszy parametr został sformatowany w sekundach, a nie dniach-godzinach: minutach: sekundach.
bash
ps
text-formatting
dreadiscool
źródło
źródło
Odpowiedzi:
Konwertuje to po raz pierwszy na sekundy:
Na przykład polecenie ps powoduje:
awk
Polecenie przetwarza że i powroty:Wyjaśnienie
-F'[: ]+'
To mówi awk, aby traktował zarówno dwukropki, jak i spacje jako separatory pól. W ten sposób godziny, minuty i sekundy pojawiają się jako osobne pola.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
Inicjał
/:/
ogranicza kod do działania tylko w wierszach zawierających dwukropek. To usuwa linie nagłówka. Liczba sekund jest obliczana na podstawie godzin, minut i sekund przezt=$3+60*($2+60*$1)
. Wynikowa wartość dlat
jest następnie drukowana wraz z upływem czasu.Obsługa dni
Jeśli
ps
produkuje dni, godziny, minuty, sekundy, jak w:Następnie użyj tego kodu zamiast:
Jeśli dni mogą, ale nie muszą być poprzedzone danymi wyjściowymi, użyj tego polecenia kombinacji:
źródło
Jeśli nie chcesz wprowadzać awk w grze, czyste rozwiązanie bash (t_str zawiera sformatowany ciąg, t_sec zdekodowany czas w sekundach):
źródło
Nie określasz, dla którego systemu operacyjnego to jest; jeśli jest to Linux, a biorąc pod uwagę, że interesuje Cię monitorowanie określonego procesu, warto go przeanalizować
/proc/$PROCID/stat
- szczegółowe informacje można znaleźć naproc(5)
stronie podręcznika.źródło