Znajdowanie czasu wykonania polecenia z perspektywy czasu


22

Właśnie wykonałem długo działający proces z monitu bash. Z perspektywy czasu chciałbym timena nim biegać lub zanotować czas, w którym go rozpocząłem.

Czy jest jakiś sposób na uzyskanie tych informacji z mocą wsteczną? .bash_historyNie wydaje się zawierać znaczniki czasu.

W moim szczególnym przypadku jest to Mac OS X, ale interesują mnie ogólne rozwiązania Unix / Linux.

Aby to wyjaśnić, proces został zakończony i wolałbym nie uruchamiać go ponownie, chyba że jest to absolutnie konieczne!


Zawsze też o tym zapomniałem i skonfigurowałem monit, aby wyświetlał czas.
matematyka,

Odpowiedzi:


23

bash faktycznie pamięta czasy, dopóki nie zamkniesz skorupy.

Więc spróbuj uruchomić

HISTTIMEFORMAT='%x %X ' history

Jeśli również umieścisz

HISTTIMEFORMAT=<some format>

w twoim ~/.bashrcrównież zostanie napisane ~/.bash_historyprzy wyjściu, więc możesz sprawdzić, co się stało w poprzednich sesjach powłoki.


Wspaniale Mike, nawet nie sądziłem, że to możliwe.
Tim

9

Odpowiedź Mikela jest dobra, z tym wyjątkiem, że jeśli uruchomisz program i odejdziesz na chwilę, nie możesz być pewien, kiedy proces się zakończy. Nawet jeśli masz czas na uruchomienie programu, nie wiesz, ile czasu to zajęło.

Nie mam rozwiązania dla sprawy, w której musisz się dowiedzieć bez przygotowania. Jeśli jednak zamierzasz to zrobić ponownie, możesz zrobić tak jak ja: wydrukuj aktualny czas wraz z poleceniem powłoki. W ten sposób, jeśli nadal masz otwarty terminal, możesz zobaczyć czas uruchomienia programu i czas, kiedy zostanie wydrukowany następny monit. Trochę matematyki zapewni ci czas wykonania.

Aby to zrobić bash, umieść to w .bashrc:

export PS1="\A \u@\h \W \$ "

W zsh, umieścić to w swoim .zshrc:

export PS1="%D{%H:%M} %n@%m %1~ %# "

Powyższe spowoduje, że twój shell poprosi o format <time> <username>@<hostname> <current dir> <$ or % or #>. Aby uzyskać informacje o różnych powłokach i szalonych fantazyjnych podpowiedziach, przeczytaj stronę manuala swojej powłoki.

Uwaga: prawdopodobnie nie pomoże to, jeśli potrzebujesz wysokiej precyzji lub jeśli program generuje tak dużo danych wyjściowych, że nie widzisz poprzedniego monitu.


2
Z tego powodu dołączam znacznik czasu do monitu powłoki, ale uważaj, że czas wskazany w monicie to czas, w którym monit został wydrukowany, co może różnić się od czasu, w którym faktycznie skończyłeś pisać i naciśnij Enter, aby uruchomić polecenie. Innymi słowy, pamiętaj, aby sam uwzględnić „szybki czas bezczynności”.
jw013,

5

Jeśli proces jest nadal uruchomiony, możesz użyć go, psaby uzyskać czas rozpoczęcia i ile czasu procesora użył.

Na przykład dla wszystkich procesów:

ps -eo cputime,start,pid,command,args

Dla konkretnego pid (12345):

ps -p 12345 -o cputime,start,pid,command,args

Dzięki, ale proces już się zakończył. Będę o tym pamiętać, jeśli uruchomię to ponownie.
Graham Borland,

Używam GNU psw systemie Linux, psw MacOSX może być BSD i nie jestem pewien argumentów.
jsbillings

Pamiętaj też, że czas procesora nie jest „w czasie rzeczywistym”
Juan

4

lastcomm (jeśli włączone jest rozliczanie procesów BSD) da ci czas wykonania (w pewnym ograniczonym sensie, który może, ale nie musi być odpowiedni).

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.