Jak mogę uzyskać zegar ścienny z uruchomionego procesu?

14

Rozpocząłem sprawdzanie skrótu dużego pliku i nie chcę go ponownie uruchamiać za pomocą time. Jak mogę uzyskać zegar ścienny bez używania czasu na początku lub korzystania datebezpośrednio przed wywołaniem polecenia?

Dan S.
źródło

Odpowiedzi:

12

W przypadku uruchomionego procesu możesz to zrobić:

PID=5462
command ps -p "$PID" -o etime
command ps -p "$PID" --no-headers -o etime

Jako ogólną funkcję możesz zmodyfikować monit powłoki. Oto moja definicja zachęty bash:

TERM_RED_START=$'\033[1m\033[31m'
TERM_RED_END=$'\033(B\033[m'
PS1='\nec:$(ec=$?; if [ 0 -eq $ec ];
then printf %-3d $ec;
else echo -n "$TERM_RED_START"; printf %-3d $ec; echo "$TERM_RED_END";
fi) \t  \u@\h:\w\nstart cmd:> '
PS2="cont. cmd:> "

Odpowiednią częścią dla ciebie jest \tna razie.

Nie rozwiązuje to jednak wszystkich problemów. Nowy monit pokaże, kiedy proces się zakończy, ale poprzedni monit mógł być dość stary, gdy uruchomiono polecenie do pomiaru. Więc albo pamiętasz o odnowieniu monitu przed uruchomieniem długo działających poleceń, albo pamiętasz aktualny czas, kiedy chcesz wiedzieć, ile czasu zajmie bieżący proces.

Aby uzyskać kompletne rozwiązanie, potrzebujesz funkcji audytu (która rejestruje czas rozpoczęcia i zakończenia procesów). Ale może to spowodować ogromną ilość danych, jeśli nie można ograniczyć się do powłoki.

Hauke ​​Laging
źródło
1

Opierając się na zaakceptowanej odpowiedzi, możesz również stale monitorować upływający czas uruchomionego procesu, używając watch:

PID=5462
watch command ps -p "$PID" -o etime
landroni
źródło