The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Команда time вывод в мс., !*! evi, 04-Сен-24, 12:23  [смотреть все]
Здравствуйте!

При использовании команды time --format хочу вывод времени в милисекундах при форматированном выводе.

Если использовать команду без аргументов, команда выводит следующим образом _и_такой_вывод_меня_устраивает_:
# time ./my_prog < input.txt
> real    0m0,058s
> user    0m0,019s
> sys    0m0,040s

Но для использования флагов, необходимо использовать абсолютный путь, но от этого меняется формат вывода по default как указано в man 1 time (переменная окружения $TIME не задана), а точность указывается на один порядок меньше:
# /bin/time ./my_prog < input.txt
> 0.02user 0.02system 0:00.05elapsed 96%CPU (0avgtext+0avgdata 2428maxresident)k
> 0inputs+0outputs (0major+302minor)pagefaults 0swaps

Далее проделываю использую флаги -p или -f и вывод тоже с точностью на порядок меньше:
# /bin/time -p ./my_prog < input.txt
> real 0.05
> user 0.02
> sys 0.03

# /bin/time -f "real\t%e\nuser\t%U\nsys\t%S" ./my_prog < input.txt
> real 0.05
> user 0.02
> sys 0.03

#

  • Команда time вывод в мс., !*! pavel_simple., 14:23 , 04-Сен-24 (1)
    >[оверквотинг удален]
    > на порядок меньше:
    > # /bin/time -p ./my_prog < input.txt
    >> real 0.05
    >> user 0.02
    >> sys 0.03
    > # /bin/time -f "real\t%e\nuser\t%U\nsys\t%S" ./my_prog < input.txt
    >> real 0.05
    >> user 0.02
    >> sys 0.03
    > #

    и снова третье сентября

  • Команда time вывод в мс., !*! Аноним, 22:42 , 04-Сен-24 (2)
    -f "real %6.3f\nuser %6.3f\nsys %6.3f\n"

    А вообще, какую time и в какой ОС используете?

    • Команда time вывод в мс., !*! evi, 22:53 , 04-Сен-24 (3)
      > -f "real %6.3f\nuser %6.3f\nsys %6.3f\n"

      Не работает, что естественно. "A percent sign (`%') in the format string causes the character to be interpreted as a resource specifier, which is similar to the formatting characters in the printf(3) function."

      > А вообще, какую time и в какой ОС используете?

      Linux. Lubuntu. В теме Unix стоит. :)

  • Команда time вывод в мс., !*! Аноним, 18:01 , 06-Сен-24 (4)
    В моей системе GNU time 1.7 .
    Скачал исходный текст этой программы с
    https://ftp.gnu.org/gnu/time/

    Там точность жёстко забита в 2 цифры после точки:

            case 'S':        /* System time.  */
              fprintf (fp, "%ld.%02ld",
                   resp->ru.ru_stime.tv_sec,
                   resp->ru.ru_stime.TV_MSEC / 10);
              break;
            case 'U':        /* User time.  */
              fprintf (fp, "%ld.%02ld",
                   resp->ru.ru_utime.tv_sec,
                   resp->ru.ru_utime.TV_MSEC / 10);
              break;

    так что, надо программу модифицировать.
    Или использовать Python:

    from datetime import datetime
    date_start = datetime.now()

    Что- то запускаете

    print('Продолжительность работы    ', datetime.now() - date_start)

    • Команда time вывод в мс., !*! evi, 23:51 , 08-Сен-24 (5)
      > В моей системе GNU time 1.7 .
      > Скачал исходный текст этой программы с
      > https://ftp.gnu.org/gnu/time/
      > Там точность жёстко забита в 2 цифры после точки:

      Тоже глянул. Действительно. А ещё оказывается есть time как shell keyword, которое вшито в ядро и оно умеет в ms. А есть /bin/time -- отдельный бинарник. В итоге, это две разные команды.

      Спасибо большое!


      • Команда time вывод в мс., !*! Аноним, 13:53 , 09-Сен-24 (6)
        >А ещё оказывается есть time как shell keyword, которое
        > вшито в ядро и оно умеет в ms. А есть /bin/time
        > -- отдельный бинарник. В итоге, это две разные команды.

        у меня:
        $ type time
        time является /usr/bin/time

        то есть в моей системе нет time как команды shell .
        Зато есть команда shell 'times':
        "times  Print  the  accumulated  user and system times for the shell and for pro‐
                      cesses run from the shell."

        Проверим:
        $ times date
        0m0.039s 0m0.005s
        0m0.000s 0m0.000s

        Работает.

        • Команда time вывод в мс., !*! evi, 17:44 , 09-Сен-24 (7)
          > у меня:
          > $ type time
          > time является /usr/bin/time

          У меня:
          $ type time
          time is a shell keyword

          $ man bash
          ...
          RESERVED WORDS
                 Reserved words are words that have a special meaning to the shell.  The  follow‐
                 ing  words are recognized as reserved when unquoted and either the first word of
                 a command (see SHELL GRAMMAR below), the third word of a case or select  command
                 (only  in  is  valid),  or  the  third word of a for command (only in and do are
                 valid):

                 ! case  coproc  do done elif else esac fi for function if in select  then  until
                 while { } time [[ ]]q
          ...

          > то есть в моей системе нет time как команды shell .
          > Зато есть команда shell 'times':

          $time sleep 3
          real    0m3,012s
          user    0m0,003s
          sys    0m0,009s

          $ /bin/time -p sleep 3
          real 3.00
          user 0.00
          sys 0.00

          $times sleep 3
          0m0,353s 0m0,287s
          0m19,345s 0m4,564s

          Что-то эта команда другое делает. Не хочу разбираться. :-)

          Почитать про сам time, который is shell keyword, можно так:
          help time

          Меня вполне устраивает по своему результату конструкция:
          $time ./my_prog < input.txt > /dev/null

          Но проблема в том, что в рамках скрипта #!/bin/sh, почему-то срабатывает /bin/time...

          • Команда time вывод в мс., !*! Аноним, 19:56 , 09-Сен-24 (8)
            Да, times не для хронометража.
            А какая оболочка?
            Запустите
            echo $SHELL

            А сценарии запускать можно с шебангом
            #!/bin/bash

            может тогда сработает. А если не получится - в принципе несложно модифицировать GNU time, исходный текст же есть. Надо только установить компилятор (gcc), build-essentials, make.

            • Команда time вывод в мс., !*! evi, 20:15 , 09-Сен-24 (9)
              > А сценарии запускать можно с шебангом
              > #!/bin/bash

              Да, так и сделал. Заработало, но не всё гладко.

              Есть скрипт runtest.sh, в нём есть уже известная строка:
              time ./my_prog < input.txt > /dev/null

              Проблема что когда конвеером передаю в less:
              $ ./runtest | less

              Во время листинга (j, k, gg, G) исчезают строки которые вернула команда time. Вывод команды явно идёт не в stdout. Есть какая-то возможность определить какой номер потока у неё (если он, конечно, есть)?

              • Команда time вывод в мс., !*! evi, 22:40 , 09-Сен-24 (10)
                > Во время листинга (j, k, gg, G) исчезают строки которые вернула команда
                > time. Вывод команды явно идёт не в stdout. Есть какая-то возможность
                > определить какой номер потока у неё (если он, конечно, есть)?

                У /bin/time выводится в stderr. Куда выводится у bash'овского time пока загадка.

                190 /* Output stream, stderr by default.  */                                        
                191 static FILE *outfp;
                ...
                650   outfp = stderr;

                • Команда time вывод в мс., !*! evi, 23:50 , 09-Сен-24 (11)
                  > Куда выводится у bash'овского time пока загадка.

                  Проверил исходники bash, файл execute_cmd.c. Там есть подпрограмма, которая судя по всему и выводит время на экран:
                  static void print_formatted_time (fp, format, rs, rsf, us, usf, ss, ssf, cpu)  

                  И я нашёл только один вызов данной подпрограммы:
                  1464     print_formatted_time (stderr, time_format, rs, rsf, us, usf, ss, ssf, cpu);

                  Но при этом данная конструкция не работает:
                  $time echo test 2> /dev/null
                  test

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





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру