긴 프로세스를 실행하는 동안 경과 시간을 표시할 수 있는 명령이 있습니까?

긴 프로세스를 실행하는 동안 경과 시간을 표시할 수 있는 명령이 있습니까?

예를 들어 웹사이트 기능 테스트와 같은 긴 명령을 실행하는 경우 다음과 같은 명령이 있습니까?

elapsed npm test

이는 npm test여러 가지 명령을 포함할 수 있는 프로세스 또는 셸 스크립트이며 최대 45분이 소요될 수 있습니다. 실행되는 동안 1분마다 또는 5분마다 "22분 경과"를 출력할 수 있으면 좋을 것 같습니다.

이 명령은 time소요된 총 시간을 표시할 수 있지만 도중에 경과된 시간은 표시할 수 없습니다.

답변1

당신이 사용할 수있는 pv -t:

npm test | pv -t

또는 출력 통과를 방지하려면 npm쓰기가 아닌 pvfd를 사용하십시오.npm

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

답변2

백그라운드에서 이 명령을 시작하고 1분마다 소비된 CPU 시간을 폴링합니다.

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

답변3

~을 따라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를 재사용할 위험이 발생합니다.

1분마다 경과 시간(분) 보고5매분 대신에 첫 번째 분만 변경하세요.60300.

관련 정보