Intereting Posts
Как выводить rsync отправленные данные в реальном времени с использованием стандартных инструментов Кто-нибудь еще использует MINIX? Обновление моего веб-сервера производства Как использовать поиск в отдельных файлах zip в каталоге? Создание самоподписанного сертификата для tomcat 6 Задача xfce gtk theme Домашний каталог пользователя Virtualbox Могу ли я скомпилировать на одном компьютере и «сделать установку» в другом? Многопользовательская мышь для мыши и мыши с поддержкой Linux Как можно отключить корневую оболочку через определенный промежуток времени? Почему awk не делает сумму ноль, а вместо этого очень маленьким? Распределение и конфигурация Linux для тестирования производительности системы как я могу синхронизировать конкретное устройство? Минимизировать зарезервированное пространство на томе ext4 без больших файлов Измените все права доступа к папке с помощью команды 1

Есть ли команда, показывающая время, прошедшее при длительном процессе?

Скажем, если мы запустим длинную команду, например, функциональный тест для веб-сайта, есть команда, такая как:

elapsed npm test 

где npm test – это сценарий процесса или оболочки, возможно, с несколькими различными командами, которые могут занимать 45 минут. Было бы неплохо, если во время работы он может распечатать «22 минуты истек» каждую минуту или каждые 5 минут.

Время команды может отображать общее время, которое требуется, но не время, прошедшее по пути.

Запустите команду в фоновом режиме и опросите ее прошедшее время процессора каждую минуту:

 npm test & while sleep 1m do ps -o etime $! done 

Вы можете использовать pv -t :

 npm test | pv -t 

Или, чтобы избежать выхода npm , проходящего через pv , используйте fd, который npm не пишет:

 { npm test 3>&1 >&4 4>&- | pv -t; } 4>&1 

Вдоль строк ответа l0b0 : положите задание в фоновом режиме, но затем запустите цикл занятости вокруг вопроса «он все еще работает?», Испуская прошедшие минуты по пути:

истекшее

 #!/bin/sh start=$(date +%s) "$@" & while ps -p $! > /dev/null do sleep 1 now=$(date +%s) if [ $(( (now - start) % 60)) -eq 0 ] then printf "%d minutes have elapsed\n" $(( (now - start) / 60)) fi done 

Это приводит к риску повторного использования одного и того же PID в качестве нашего фонового процесса, если наш процесс завершится и начнется другой процесс, пока мы спим.

Чтобы сообщать об истекших минутах каждые 5 минут вместо каждой минуты, просто измените первые 60 на 300 .