Jak mogę zmierzyć czas wykonania procesu terminalowego?


160

Próbuję zmierzyć czas wykonania procesu, który wywołuję za pomocą wiersza polecenia (tzn. Chcę dowiedzieć się, ile czasu zajmuje zakończenie procesu). Czy jest jakieś polecenie, które mogę dodać do polecenia wywołującego proces, który to osiągnie?

Odpowiedzi:


197

Dodaj timeprzed poleceniem, które chcesz zmierzyć. Na przykład: time ls.

Dane wyjściowe będą wyglądać następująco:

real    0m0.606s
user    0m0.000s
sys     0m0.002s

Wyjaśnienie real, useri sys(od man time):

  • real: Upływający rzeczywisty (zegar ścienny) czas wykorzystywany przez proces, w sekundach.
  • user: Łączna liczba sekund procesora wykorzystywanych bezpośrednio przez proces (w trybie użytkownika), w sekundach.
  • sys: Łączna liczba sekund CPU wykorzystywanych przez system w imieniu procesu (w trybie jądra), w sekundach.

1
@ninjalj, czy możesz podać więcej informacji o tym real, co useri syskiedy zwraca to polecenie?
Christopher Kyle Horton

2
@JacobVlijm Ta odpowiedź nie jest tak skomplikowana. :) Możesz edytować w swoim komentarzu i tak to zrobić.
muru

1
Pamiętaj, że możesz potrzebować, sudo apt-get install timejeśli używasz powłoki, która timenie jest wbudowana.
poolie

1
Zauważ, że jest to wynik timewbudowany w Bash , ale man timedotyczyłby pliku wykonywalnego (np. /usr/bin/timeZ timepakietu), a jego wynik wyglądałby inaczej. Również w Bash możesz ubiegać się help timeo pomoc z wbudowanym.
wjandrea

Pamiętaj, że zakończenie procesu nie oznacza, że ​​cała praca została zakończona. Kopiowanie może potrwać dodatkowe minuty po powrocie „czasu” dla buforów systemu opróżniania (w tym również z nieprzydzielonym czasem sys).
ubfan1

43

Do pomiaru delta linia po linii spróbuj gnomon .

Jest to narzędzie wiersza poleceń, trochę jak ts moreutils, do dodawania informacji o znaczniku czasu do standardowego wyjścia innego polecenia. Przydatny w długotrwałych procesach, w których potrzebujesz historycznego zapisu tego, co trwa tak długo.

Przesłanie czegokolwiek do gnomona spowoduje wstawienie znacznika czasu do każdej linii, wskazując, jak długo ta linia była ostatnią linią w buforze - to znaczy, ile czasu zajęło wyświetlenie następnej linii. Domyślnie gnomon wyświetla sekundy, które upłynęły między każdą linią, ale można to skonfigurować.

demo gnomon


2
To całkiem sprytne.
Nathan Arthur

1
(literówka w linku, na szczęście URL w porządku). Możesz go zainstalować, sudo npm i gnomon -gjeśli masz npm. Nie jestem pewien, jak dobrze radzi sobie z liniami „postępu” za pomocą „\ r” (pozostawanie na tej samej linii): w takim przypadku chciałbym, aby liczyło to wszystko jako jedną długą linię, a nie osobne.
Tomasz Gandor

więc doprowadzamy to do gnomona! Otóż ​​to ?
Ciasto piekarz


8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

Uruchomienie tego polecenia w terminalu da ci całkowity czas na skopiowanie pliku


To da ci czas rozpoczęcia i czas zakończenia, a nie czas trwania.
wjandrea

To dobra odpowiedź, w pewnych okolicznościach. Na przykład następujące findpolecenie - bez 2>/dev/nullprzekierowania - wyświetla obfite Permission denied wiadomości. Jednak dodanie 2>/dev/nulldo tego polecenia powoduje przerwanie timeczęści tego polecenia. Następujące zapewnia dobry kompromis: START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"podając (np.) /usr/lib/libname-server-2.a find command took 3 sec Jako jedyny wynik.
Victoria Stuart

Dodatek do mojego komentarza: oczywiście możesz po prostu uruchomić time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(tj. As sudo) - unikając licznych Permission deniedostrzeżeń.
Victoria Stuart

4

Czasami potrzebuję stopera, aby policzyć, ile czasu zajmuje wykonanie takiego działania, jak uruchomienie aplikacji, w którym to przypadku wiele rozwiązań tutaj nie jest przydatnych.

Do tego lubię używać sw .

południowy zachód

zainstalować

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

Stosowanie

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.