В чем разница между SIGALRM и SIGVTALRM?

Ваша проблема в том, что вы передаете слишком много данных в dateс помощью xargs. Кроме того, вы не передаете дополнительную текстовую строку в конце, чтобы сделать ее частью вывода.

Было бы лучше сделать всю операцию в скрипте awk. Как в GNU awk, так и в mawkесть функции для основных манипуляций с отметками времени :

.
{
        YYYY    = substr($1, 1, 4)   # year
        mm      = substr($1, 5, 2)   # month
        dd      = substr($1, 7, 2)   # day
        HH      = substr($1, 9, 2)   # hour
        MM      = substr($1, 11, 2)  # minute
        SS      = substr($1, 13, 2)  # seconds
        sss     = substr($1, 15, 3)  # fractional seconds

        text    = substr($1, 18)     # the rest

        tm = mktime(sprintf("%s %s %s %s %s %s", YYYY, mm, dd, HH, MM, SS))
        printf("%s.%s %s\n", strftime("%Y-%m-%dT%H:%M:%S", tm, 1), sss, text)
}

Это выделяет различные компоненты входной временной метки в различные переменные, используя substr(). Затем время Unix вычисляется с использованием mktime()(. Предполагается, что входное время находится в местном часовом поясе ), и оно преобразуется в строку временной метки (UTC )в соответствующем формате с использованием strftime().

Обратите внимание, что доли секунды(sssв коде )никогда не являются частью вычислений времени, а вместо этого просто передаются как есть из ввода в вывод.

Запуск:

$ awk -f script.awk file
2019-10-14T14:16:53.042 nmd
2019-10-14T14:16:53.052 egc
2019-10-04T06:19:01.490 egc
2019-10-04T06:19:01.493 nex
2019-10-04T06:19:01.497 nex
2019-10-04T06:19:02.531 nex
2019-10-04T06:19:02.534 ksd

См. документацию по mktime()и strftime()в вашем руководстве awk.

2
21.05.2020, 14:59
1 ответ

Согласно википедииhttps://en.wikipedia.org/wiki/Signal_(IPC)SIGVTALRM отправляется по истечении процессорного времени (, т.е. «рабочего времени» )процесса. Вместо этого SIGALRM считает реальное время, измеренное секундомером :

.

Сигналы SIGALRM, SIGVTALRM и SIGPROF отправляются процессу, когда истекает предел времени, указанный в вызове предшествующей функции установки аварийного сигнала (, такой как settimer ). Сигнал SIGALRM отправляется по истечении реального или часового времени. SIGVTALRM отправляется, когда истекает время ЦП, используемое процессом. SIGPROF отправляется, когда время ЦП, используемое процессом и системой от имени процесса, истекает.

2
18.03.2021, 23:34

Теги

Похожие вопросы